Browse Source

feat: Enhance user and role management with search capabilities and resource provider integration

pull/24374/head
maliming 3 months ago
parent
commit
4b96a90b2d
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 8
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/Integration/IIdentityUserIntegrationService.cs
  2. 6
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/RoleLookupCountInputDto.cs
  3. 8
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/RoleLookupSearchInputDto.cs
  4. 20
      modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/Integration/IdentityUserIntegrationService.cs
  5. 7
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IUserRoleFinder.cs
  6. 4
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en.json
  7. 10
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/RoleFinderResult.cs
  8. 10
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/UserFinderResult.cs
  9. 35
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/UserRoleFinder.cs
  10. 16
      modules/identity/src/Volo.Abp.Identity.HttpApi.Client/ClientProxies/Volo/Abp/Identity/Integration/IdentityUserIntegrationClientProxy.Generated.cs
  11. 204
      modules/identity/src/Volo.Abp.Identity.HttpApi.Client/ClientProxies/identity-generate-proxy.json
  12. 30
      modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/HttpClientUserRoleFinder.cs
  13. 18
      modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/Integration/IdentityUserIntegrationController.cs
  14. 3
      modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/AbpPermissionManagementDomainIdentityModule.cs
  15. 31
      modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleResourcePermissionProviderKeyLookupService.cs
  16. 31
      modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserResourcePermissionProviderKeyLookupService.cs
  17. 8
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/GetResourceProviderListResultDto.cs
  18. 4
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/IPermissionAppService.cs
  19. 8
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/ResourceProviderDto.cs
  20. 8
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/SearchProviderKeyInfo.cs
  21. 8
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/SearchProviderKeyListResultDto.cs
  22. 39
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs
  23. 6
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionManager.cs
  24. 15
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionProviderKeyLookupService.cs
  25. 5
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManagementOptions.cs
  26. 33
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/ResourcePermissionManager.cs
  27. 16
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/ResourcePermissionProviderKeyInfo.cs
  28. 14
      modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/Volo/Abp/PermissionManagement/PermissionsClientProxy.Generated.cs
  29. 105
      modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/permissionManagement-generate-proxy.json
  30. 17
      modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo/Abp/PermissionManagement/PermissionsController.cs
  31. 15
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/AddResourcePermissionManagementModal.cshtml
  32. 2
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/AddResourcePermissionManagementModal.cshtml.cs
  33. 14
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/wwwroot/client-proxies/permissionManagement-proxy.js
  34. 19
      modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/IRoleData.cs
  35. 57
      modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/RoleData.cs

8
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/Integration/IIdentityUserIntegrationService.cs

@ -10,7 +10,7 @@ namespace Volo.Abp.Identity.Integration;
public interface IIdentityUserIntegrationService : IApplicationService
{
Task<string[]> GetRoleNamesAsync(Guid id);
Task<UserData> FindByIdAsync(Guid id);
Task<UserData> FindByUserNameAsync(string userName);
@ -18,4 +18,8 @@ public interface IIdentityUserIntegrationService : IApplicationService
Task<ListResultDto<UserData>> SearchAsync(UserLookupSearchInputDto input);
Task<long> GetCountAsync(UserLookupCountInputDto input);
}
Task<ListResultDto<RoleData>> SearchRoleAsync(RoleLookupSearchInputDto input);
Task<long> GetRoleCountAsync(RoleLookupCountInputDto input);
}

6
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/RoleLookupCountInputDto.cs

@ -0,0 +1,6 @@
namespace Volo.Abp.Identity;
public class RoleLookupCountInputDto
{
public string Filter { get; set; }
}

8
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/RoleLookupSearchInputDto.cs

@ -0,0 +1,8 @@
using Volo.Abp.Application.Dtos;
namespace Volo.Abp.Identity;
public class RoleLookupSearchInputDto : ExtensiblePagedAndSortedResultRequestDto
{
public string Filter { get; set; }
}

20
modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/Integration/IdentityUserIntegrationService.cs

@ -2,6 +2,7 @@
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Users;
namespace Volo.Abp.Identity.Integration;
@ -10,13 +11,16 @@ public class IdentityUserIntegrationService : IdentityAppServiceBase, IIdentityU
{
protected IUserRoleFinder UserRoleFinder { get; }
protected IdentityUserRepositoryExternalUserLookupServiceProvider UserLookupServiceProvider { get; }
protected IIdentityRoleRepository RoleRepository { get; }
public IdentityUserIntegrationService(
IUserRoleFinder userRoleFinder,
IdentityUserRepositoryExternalUserLookupServiceProvider userLookupServiceProvider)
IdentityUserRepositoryExternalUserLookupServiceProvider userLookupServiceProvider,
IIdentityRoleRepository roleRepository)
{
UserRoleFinder = userRoleFinder;
UserLookupServiceProvider = userLookupServiceProvider;
RoleRepository = roleRepository;
}
public virtual async Task<string[]> GetRoleNamesAsync(Guid id)
@ -66,4 +70,18 @@ public class IdentityUserIntegrationService : IdentityAppServiceBase, IIdentityU
{
return await UserLookupServiceProvider.GetCountAsync(input.Filter);
}
public virtual async Task<ListResultDto<RoleData>> SearchRoleAsync(RoleLookupSearchInputDto input)
{
using (RoleRepository.DisableTracking())
{
var roles = await RoleRepository.GetListAsync(input.Filter);
return new ListResultDto<RoleData>(roles.Select(r => new RoleData(r.Id, r.Name, r.IsDefault, r.IsStatic, r.IsPublic, r.TenantId, r.ExtraProperties)).ToList());
}
}
public virtual async Task<long> GetRoleCountAsync(RoleLookupCountInputDto input)
{
return await RoleRepository.GetCountAsync(input.Filter);
}
}

7
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IUserRoleFinder.cs

@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Volo.Abp.Identity;
@ -7,6 +8,10 @@ public interface IUserRoleFinder
{
[Obsolete("Use GetRoleNamesAsync instead.")]
Task<string[]> GetRolesAsync(Guid userId);
Task<string[]> GetRoleNamesAsync(Guid userId);
Task<List<UserFinderResult>> SearchUserAsync(string filter);
Task<List<RoleFinderResult>> SearchRoleAsync(string filter);
}

4
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en.json

@ -135,6 +135,8 @@
"ModificationTime": "Modification time",
"PasswordUpdateTime": "Password update time",
"LockoutEndTime": "Lockout end time",
"FailedAccessCount": "Failed access count"
"FailedAccessCount": "Failed access count",
"UserResourcePermissionProviderKeyLookupService": "User",
"RoleResourcePermissionProviderKeyLookupService": "Role"
}
}

10
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/RoleFinderResult.cs

@ -0,0 +1,10 @@
using System;
namespace Volo.Abp.Identity;
public class RoleFinderResult
{
public Guid Id { get; set; }
public string RoleName { get; set; }
}

10
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/UserFinderResult.cs

@ -0,0 +1,10 @@
using System;
namespace Volo.Abp.Identity;
public class UserFinderResult
{
public Guid Id { get; set; }
public string UserName { get; set; }
}

35
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/UserRoleFinder.cs

@ -1,16 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Repositories;
namespace Volo.Abp.Identity;
public class UserRoleFinder : IUserRoleFinder, ITransientDependency
{
protected IIdentityUserRepository IdentityUserRepository { get; }
protected IIdentityRoleRepository IdentityRoleRepository { get; }
public UserRoleFinder(IIdentityUserRepository identityUserRepository)
public UserRoleFinder(IIdentityUserRepository identityUserRepository, IIdentityRoleRepository identityRoleRepository)
{
IdentityUserRepository = identityUserRepository;
IdentityRoleRepository = identityRoleRepository;
}
[Obsolete("Use GetRoleNamesAsync instead.")]
@ -19,8 +24,34 @@ public class UserRoleFinder : IUserRoleFinder, ITransientDependency
return (await IdentityUserRepository.GetRoleNamesAsync(userId)).ToArray();
}
public async Task<string[]> GetRoleNamesAsync(Guid userId)
public virtual async Task<string[]> GetRoleNamesAsync(Guid userId)
{
return (await IdentityUserRepository.GetRoleNamesAsync(userId)).ToArray();
}
public virtual async Task<List<UserFinderResult>> SearchUserAsync(string filter)
{
using (IdentityUserRepository.DisableTracking())
{
var users = await IdentityUserRepository.GetListAsync(filter: filter);
return users.Select(user => new UserFinderResult
{
Id = user.Id,
UserName = user.UserName
}).ToList();
}
}
public virtual async Task<List<RoleFinderResult>> SearchRoleAsync(string filter)
{
using (IdentityUserRepository.DisableTracking())
{
var roles = await IdentityRoleRepository.GetListAsync(filter: filter);
return roles.Select(user => new RoleFinderResult
{
Id = user.Id,
RoleName = user.Name
}).ToList();
}
}
}

16
modules/identity/src/Volo.Abp.Identity.HttpApi.Client/ClientProxies/Volo/Abp/Identity/Integration/IdentityUserIntegrationClientProxy.Generated.cs

@ -59,4 +59,20 @@ public partial class IdentityUserIntegrationClientProxy : ClientProxyBase<IIdent
{ typeof(UserLookupCountInputDto), input }
});
}
public virtual async Task<ListResultDto<RoleData>> SearchRoleAsync(RoleLookupSearchInputDto input)
{
return await RequestAsync<ListResultDto<RoleData>>(nameof(SearchRoleAsync), new ClientProxyRequestTypeValue
{
{ typeof(RoleLookupSearchInputDto), input }
});
}
public virtual async Task<long> GetRoleCountAsync(RoleLookupCountInputDto input)
{
return await RequestAsync<long>(nameof(GetRoleCountAsync), new ClientProxyRequestTypeValue
{
{ typeof(RoleLookupCountInputDto), input }
});
}
}

204
modules/identity/src/Volo.Abp.Identity.HttpApi.Client/ClientProxies/identity-generate-proxy.json

@ -200,6 +200,18 @@
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "ExtraProperties",
"jsonName": null,
"type": "Volo.Abp.Data.ExtraPropertyDictionary",
"typeSimple": "{string:object}",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
}
],
"returnValue": {
@ -673,6 +685,18 @@
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "ExtraProperties",
"jsonName": null,
"type": "Volo.Abp.Data.ExtraPropertyDictionary",
"typeSimple": "{string:object}",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
}
],
"returnValue": {
@ -1220,6 +1244,18 @@
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "ExtraProperties",
"jsonName": null,
"type": "Volo.Abp.Data.ExtraPropertyDictionary",
"typeSimple": "{string:object}",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
}
],
"returnValue": {
@ -1364,6 +1400,40 @@
"type": "System.Int64",
"typeSimple": "number"
}
},
{
"name": "SearchRoleAsync",
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "Volo.Abp.Identity.RoleLookupSearchInputDto, Volo.Abp.Identity.Application.Contracts",
"type": "Volo.Abp.Identity.RoleLookupSearchInputDto",
"typeSimple": "Volo.Abp.Identity.RoleLookupSearchInputDto",
"isOptional": false,
"defaultValue": null
}
],
"returnValue": {
"type": "Volo.Abp.Application.Dtos.ListResultDto<Volo.Abp.Users.RoleData>",
"typeSimple": "Volo.Abp.Application.Dtos.ListResultDto<Volo.Abp.Users.RoleData>"
}
},
{
"name": "GetRoleCountAsync",
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "Volo.Abp.Identity.RoleLookupCountInputDto, Volo.Abp.Identity.Application.Contracts",
"type": "Volo.Abp.Identity.RoleLookupCountInputDto",
"typeSimple": "Volo.Abp.Identity.RoleLookupCountInputDto",
"isOptional": false,
"defaultValue": null
}
],
"returnValue": {
"type": "System.Int64",
"typeSimple": "number"
}
}
]
}
@ -1544,6 +1614,18 @@
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "ExtraProperties",
"jsonName": null,
"type": "Volo.Abp.Data.ExtraPropertyDictionary",
"typeSimple": "{string:object}",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
}
],
"returnValue": {
@ -1589,6 +1671,128 @@
},
"allowAnonymous": null,
"implementFrom": "Volo.Abp.Identity.Integration.IIdentityUserIntegrationService"
},
"SearchRoleAsyncByInput": {
"uniqueName": "SearchRoleAsyncByInput",
"name": "SearchRoleAsync",
"httpMethod": "GET",
"url": "integration-api/identity/users/search/roles",
"supportedVersions": [],
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "Volo.Abp.Identity.RoleLookupSearchInputDto, Volo.Abp.Identity.Application.Contracts",
"type": "Volo.Abp.Identity.RoleLookupSearchInputDto",
"typeSimple": "Volo.Abp.Identity.RoleLookupSearchInputDto",
"isOptional": false,
"defaultValue": null
}
],
"parameters": [
{
"nameOnMethod": "input",
"name": "Filter",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "Sorting",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "SkipCount",
"jsonName": null,
"type": "System.Int32",
"typeSimple": "number",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "MaxResultCount",
"jsonName": null,
"type": "System.Int32",
"typeSimple": "number",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "ExtraProperties",
"jsonName": null,
"type": "Volo.Abp.Data.ExtraPropertyDictionary",
"typeSimple": "{string:object}",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
}
],
"returnValue": {
"type": "Volo.Abp.Application.Dtos.ListResultDto<Volo.Abp.Users.RoleData>",
"typeSimple": "Volo.Abp.Application.Dtos.ListResultDto<Volo.Abp.Users.RoleData>"
},
"allowAnonymous": null,
"implementFrom": "Volo.Abp.Identity.Integration.IIdentityUserIntegrationService"
},
"GetRoleCountAsyncByInput": {
"uniqueName": "GetRoleCountAsyncByInput",
"name": "GetRoleCountAsync",
"httpMethod": "GET",
"url": "integration-api/identity/users/count/roles",
"supportedVersions": [],
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "Volo.Abp.Identity.RoleLookupCountInputDto, Volo.Abp.Identity.Application.Contracts",
"type": "Volo.Abp.Identity.RoleLookupCountInputDto",
"typeSimple": "Volo.Abp.Identity.RoleLookupCountInputDto",
"isOptional": false,
"defaultValue": null
}
],
"parameters": [
{
"nameOnMethod": "input",
"name": "Filter",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
}
],
"returnValue": {
"type": "System.Int64",
"typeSimple": "number"
},
"allowAnonymous": null,
"implementFrom": "Volo.Abp.Identity.Integration.IIdentityUserIntegrationService"
}
}
}

30
modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/HttpClientUserRoleFinder.cs

@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
@ -25,8 +26,35 @@ public class HttpClientUserRoleFinder : IUserRoleFinder, ITransientDependency
return output.Items.Select(r => r.Name).ToArray();
}
public async Task<string[]> GetRoleNamesAsync(Guid userId)
public virtual async Task<string[]> GetRoleNamesAsync(Guid userId)
{
return await _userIntegrationService.GetRoleNamesAsync(userId);
}
public virtual async Task<List<UserFinderResult>> SearchUserAsync(string filter)
{
var users = await _userIntegrationService.SearchAsync(new UserLookupSearchInputDto()
{
Filter = filter
});
return users.Items.Select(u => new UserFinderResult
{
Id = u.Id,
UserName = u.UserName
}).ToList();
}
public virtual async Task<List<RoleFinderResult>> SearchRoleAsync(string filter)
{
var roles = await _userIntegrationService.SearchRoleAsync(new RoleLookupSearchInputDto()
{
Filter = filter
});
return roles.Items.Select(r => new RoleFinderResult
{
Id = r.Id,
RoleName = r.Name
}).ToList();
}
}

18
modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/Integration/IdentityUserIntegrationController.cs

@ -20,7 +20,7 @@ public class IdentityUserIntegrationController : AbpControllerBase, IIdentityUse
{
UserIntegrationService = userIntegrationService;
}
[HttpGet]
[Route("{id}/role-names")]
public virtual Task<string[]> GetRoleNamesAsync(Guid id)
@ -55,4 +55,18 @@ public class IdentityUserIntegrationController : AbpControllerBase, IIdentityUse
{
return UserIntegrationService.GetCountAsync(input);
}
}
[HttpGet]
[Route("search/roles")]
public virtual Task<ListResultDto<RoleData>> SearchRoleAsync(RoleLookupSearchInputDto input)
{
return UserIntegrationService.SearchRoleAsync(input);
}
[HttpGet]
[Route("count/roles")]
public virtual Task<long> GetRoleCountAsync(RoleLookupCountInputDto input)
{
return UserIntegrationService.GetRoleCountAsync(input);
}
}

3
modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/AbpPermissionManagementDomainIdentityModule.cs

@ -26,6 +26,9 @@ public class AbpPermissionManagementDomainIdentityModule : AbpModule
options.ResourceManagementProviders.Add<UserResourcePermissionManagementProvider>();
options.ResourceManagementProviders.Add<RoleResourcePermissionManagementProvider>();
options.ResourcePermissionProviderKeyLookupServices.Add<UserResourcePermissionProviderKeyLookupService>();
options.ResourcePermissionProviderKeyLookupServices.Add<RoleResourcePermissionProviderKeyLookupService>();
});
}
}

31
modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleResourcePermissionProviderKeyLookupService.cs

@ -0,0 +1,31 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Identity;
using Volo.Abp.Identity.Localization;
using Volo.Abp.Localization;
namespace Volo.Abp.PermissionManagement.Identity;
public class RoleResourcePermissionProviderKeyLookupService : IResourcePermissionProviderKeyLookupService, ITransientDependency
{
public string Name => "Role";
public ILocalizableString DisplayName { get; }
protected IUserRoleFinder UserRoleFinder { get; }
public RoleResourcePermissionProviderKeyLookupService(IUserRoleFinder userRoleFinder)
{
UserRoleFinder = userRoleFinder;
DisplayName = LocalizableString.Create<IdentityResource>(nameof(RoleResourcePermissionProviderKeyLookupService));
}
public virtual async Task<List<ResourcePermissionProviderKeyInfo>> SearchAsync(string filter = null, CancellationToken cancellationToken = default)
{
var roles = await UserRoleFinder.SearchRoleAsync(filter);
return roles.Select(r => new ResourcePermissionProviderKeyInfo(r.RoleName, r.RoleName)).ToList();
}
}

31
modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserResourcePermissionProviderKeyLookupService.cs

@ -0,0 +1,31 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Identity;
using Volo.Abp.Identity.Localization;
using Volo.Abp.Localization;
namespace Volo.Abp.PermissionManagement.Identity;
public class UserResourcePermissionProviderKeyLookupService : IResourcePermissionProviderKeyLookupService, ITransientDependency
{
public string Name => "User";
public ILocalizableString DisplayName { get; }
protected IUserRoleFinder UserRoleFinder { get; }
public UserResourcePermissionProviderKeyLookupService(IUserRoleFinder userRoleFinder)
{
UserRoleFinder = userRoleFinder;
DisplayName = LocalizableString.Create<IdentityResource>(nameof(UserResourcePermissionProviderKeyLookupService));
}
public virtual async Task<List<ResourcePermissionProviderKeyInfo>> SearchAsync(string filter = null, CancellationToken cancellationToken = default)
{
var users = await UserRoleFinder.SearchUserAsync(filter);
return users.Select(u => new ResourcePermissionProviderKeyInfo(u.Id.ToString(), u.UserName)).ToList();
}
}

8
modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/GetResourceProviderListResultDto.cs

@ -0,0 +1,8 @@
using System.Collections.Generic;
namespace Volo.Abp.PermissionManagement;
public class GetResourceProviderListResultDto
{
public List<ResourceProviderDto> Providers { get; set; }
}

4
modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/IPermissionAppService.cs

@ -12,6 +12,10 @@ public interface IPermissionAppService : IApplicationService
Task UpdateAsync([NotNull] string providerName, [NotNull] string providerKey, UpdatePermissionsDto input);
Task<GetResourceProviderListResultDto> GetResourceProviderKeyLookupServicesAsync();
Task<SearchProviderKeyListResultDto> SearchResourceProviderKeyAsync(string serviceName, string filter);
Task<GetResourcePermissionDefinitionListResultDto> GetResourceDefinitionsAsync([NotNull] string resourceName);
Task<GetResourcePermissionListResultDto> GetResourceAsync([NotNull] string resourceName, [NotNull] string resourceKey);

8
modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/ResourceProviderDto.cs

@ -0,0 +1,8 @@
namespace Volo.Abp.PermissionManagement;
public class ResourceProviderDto
{
public string Name { get; set; }
public string DisplayName { get; set; }
}

8
modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/SearchProviderKeyInfo.cs

@ -0,0 +1,8 @@
namespace Volo.Abp.PermissionManagement;
public class SearchProviderKeyInfo
{
public string ProviderKey { get; set; }
public string ProviderDisplayName { get; set; }
}

8
modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/SearchProviderKeyListResultDto.cs

@ -0,0 +1,8 @@
using System.Collections.Generic;
namespace Volo.Abp.PermissionManagement;
public class SearchProviderKeyListResultDto
{
public List<SearchProviderKeyInfo> Keys { get; set; }
}

39
modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs

@ -166,6 +166,35 @@ public class PermissionAppService : ApplicationService, IPermissionAppService
}
}
[Authorize] //TODO: Check permission
public virtual async Task<GetResourceProviderListResultDto> GetResourceProviderKeyLookupServicesAsync()
{
var lookupServices = await ResourcePermissionManager.GetProviderKeyLookupServicesAsync();
return new GetResourceProviderListResultDto
{
Providers = lookupServices.Select(s => new ResourceProviderDto
{
Name = s.Name,
DisplayName = s.DisplayName.Localize(StringLocalizerFactory),
}).ToList()
};
}
[Authorize] //TODO: Check permission
public virtual async Task<SearchProviderKeyListResultDto> SearchResourceProviderKeyAsync(string serviceName, string filter)
{
var lookupService = await ResourcePermissionManager.GetProviderKeyLookupServiceAsync(serviceName);
var keys = await lookupService.SearchAsync(filter);
return new SearchProviderKeyListResultDto
{
Keys = keys.Select(x => new SearchProviderKeyInfo
{
ProviderKey = x.ProviderKey,
ProviderDisplayName = x.ProviderDisplayName,
}).ToList()
};
}
[Authorize] //TODO: Check permission
public virtual async Task<GetResourcePermissionDefinitionListResultDto> GetResourceDefinitionsAsync(string resourceName)
{
@ -174,7 +203,7 @@ public class PermissionAppService : ApplicationService, IPermissionAppService
Permissions = new List<ResourcePermissionDefinitionDto>()
};
var resourcePermissions = await ResourcePermissionManager.GetAvailableResourcePermissionsAsync(resourceName);
var resourcePermissions = await ResourcePermissionManager.GetAvailablePermissionsAsync(resourceName);
foreach (var resourcePermission in resourcePermissions)
{
result.Permissions.Add(new ResourcePermissionDefinitionDto()
@ -195,7 +224,7 @@ public class PermissionAppService : ApplicationService, IPermissionAppService
Permissions = new List<ResourcePermissionGrantInfoDto>()
};
var resourcePermissions = await ResourcePermissionManager.GetAvailableResourcePermissionsAsync(resourceName);
var resourcePermissions = await ResourcePermissionManager.GetAvailablePermissionsAsync(resourceName);
var resourcePermissionGrantsGroup = await ResourcePermissionManager.GetAllGroupAsync(resourceName, resourceKey);
foreach (var resourcePermissionGrant in resourcePermissionGrantsGroup)
{
@ -235,7 +264,7 @@ public class PermissionAppService : ApplicationService, IPermissionAppService
result.Permissions.Add(new ResourcePermissionWithProdiverGrantInfoDto
{
Name = resourcePermission.Name,
DisplayName = (await PermissionDefinitionManager.GetResourcePermissionOrNullAsync(resourceName))?.DisplayName?.Localize(StringLocalizerFactory),
DisplayName = (await PermissionDefinitionManager.GetResourcePermissionOrNullAsync(resourcePermission.Name))?.DisplayName.Localize(StringLocalizerFactory),
IsGranted = resourcePermission.IsGranted
});
}
@ -246,7 +275,7 @@ public class PermissionAppService : ApplicationService, IPermissionAppService
[Authorize] //TODO: Check permission
public virtual async Task UpdateResourceAsync(string resourceName, string resourceKey, UpdateResourcePermissionsDto input)
{
var resourcePermissions = await ResourcePermissionManager.GetAvailableResourcePermissionsAsync(resourceName);
var resourcePermissions = await ResourcePermissionManager.GetAvailablePermissionsAsync(resourceName);
foreach (var resourcePermission in resourcePermissions)
{
var isGranted = !input.Permissions.IsNullOrEmpty() && input.Permissions.Any(p => p == resourcePermission.Name);
@ -257,7 +286,7 @@ public class PermissionAppService : ApplicationService, IPermissionAppService
[Authorize] //TODO: Check permission
public virtual async Task DeleteResourceAsync(string resourceName, string resourceKey, string providerName, string providerKey)
{
var resourcePermissions = await ResourcePermissionManager.GetAvailableResourcePermissionsAsync(resourceName);
var resourcePermissions = await ResourcePermissionManager.GetAvailablePermissionsAsync(resourceName);
foreach (var resourcePermission in resourcePermissions)
{
await ResourcePermissionManager.SetAsync(resourcePermission.Name, resourceName, resourceKey, providerName, providerKey, false);

6
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionManager.cs

@ -6,7 +6,11 @@ namespace Volo.Abp.PermissionManagement;
public interface IResourcePermissionManager
{
Task<List<PermissionDefinition>> GetAvailableResourcePermissionsAsync(string resourceName);
Task<List<IResourcePermissionProviderKeyLookupService>> GetProviderKeyLookupServicesAsync();
Task<IResourcePermissionProviderKeyLookupService> GetProviderKeyLookupServiceAsync(string providerName);
Task<List<PermissionDefinition>> GetAvailablePermissionsAsync(string resourceName);
Task<PermissionWithGrantedProviders> GetAsync(
string permissionName,

15
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionProviderKeyLookupService.cs

@ -0,0 +1,15 @@
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Localization;
namespace Volo.Abp.PermissionManagement;
public interface IResourcePermissionProviderKeyLookupService
{
public string Name { get; }
public ILocalizableString DisplayName { get; }
Task<List<ResourcePermissionProviderKeyInfo>> SearchAsync(string filter = null, CancellationToken cancellationToken = default);
}

5
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManagementOptions.cs

@ -8,9 +8,11 @@ public class PermissionManagementOptions
public ITypeList<IPermissionManagementProvider> ManagementProviders { get; }
public Dictionary<string, string> ProviderPolicies { get; }
public ITypeList<IResourcePermissionManagementProvider> ResourceManagementProviders { get; }
public ITypeList<IResourcePermissionProviderKeyLookupService> ResourcePermissionProviderKeyLookupServices { get; }
/// <summary>
/// Default: true.
/// </summary>
@ -27,5 +29,6 @@ public class PermissionManagementOptions
ProviderPolicies = new Dictionary<string, string>();
ResourceManagementProviders = new TypeList<IResourcePermissionManagementProvider>();
ResourcePermissionProviderKeyLookupServices = new TypeList<IResourcePermissionProviderKeyLookupService>();
}
}

33
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/ResourcePermissionManager.cs

@ -33,6 +33,8 @@ public class ResourcePermissionManager : IResourcePermissionManager, ISingletonD
private readonly Lazy<List<IResourcePermissionManagementProvider>> _lazyProviders;
private readonly Lazy<List<IResourcePermissionProviderKeyLookupService>> _lazyProviderKeyLookupServices;
public ResourcePermissionManager(
IPermissionDefinitionManager permissionDefinitionManager,
ISimpleStateCheckerManager<PermissionDefinition> simpleStateCheckerManager,
@ -58,9 +60,30 @@ public class ResourcePermissionManager : IResourcePermissionManager, ISingletonD
.ToList(),
true
);
_lazyProviderKeyLookupServices = new Lazy<List<IResourcePermissionProviderKeyLookupService>>(
() => Options
.ResourcePermissionProviderKeyLookupServices
.Select(c => serviceProvider.GetRequiredService(c) as IResourcePermissionProviderKeyLookupService)
.ToList(),
true
);
}
public virtual Task<List<IResourcePermissionProviderKeyLookupService>> GetProviderKeyLookupServicesAsync()
{
return Task.FromResult(_lazyProviderKeyLookupServices.Value);
}
public virtual Task<IResourcePermissionProviderKeyLookupService> GetProviderKeyLookupServiceAsync(string serviceName)
{
var service = _lazyProviderKeyLookupServices.Value.FirstOrDefault(s => s.Name == serviceName);
return service == null
? throw new AbpException("Unknown resource permission provider key lookup service: " + serviceName)
: Task.FromResult(service);
}
public virtual async Task<List<PermissionDefinition>> GetAvailableResourcePermissionsAsync(string resourceName)
public virtual async Task<List<PermissionDefinition>> GetAvailablePermissionsAsync(string resourceName)
{
var multiTenancySide = CurrentTenant.GetMultiTenancySide();
var resourcePermissions = new List<PermissionDefinition>();
@ -134,7 +157,7 @@ public class ResourcePermissionManager : IResourcePermissionManager, ISingletonD
public virtual async Task<List<PermissionWithGrantedProviders>> GetAllAsync(string resourceName, string resourceKey)
{
var resourcePermissionDefinitions = await GetAvailableResourcePermissionsAsync(resourceName);
var resourcePermissionDefinitions = await GetAvailablePermissionsAsync(resourceName);
var resourcePermissionGrants = await ResourcePermissionGrantRepository.GetPermissionsAsync(resourceName, resourceKey);
var result = new List<PermissionWithGrantedProviders>();
foreach (var resourcePermissionDefinition in resourcePermissionDefinitions)
@ -162,14 +185,14 @@ public class ResourcePermissionManager : IResourcePermissionManager, ISingletonD
public virtual async Task<List<PermissionWithGrantedProviders>> GetAllAsync(string resourceName, string resourceKey, string providerName, string providerKey)
{
var permissionDefinitions = await GetAvailableResourcePermissionsAsync(resourceName);
var permissionDefinitions = await GetAvailablePermissionsAsync(resourceName);
var multiplePermissionWithGrantedProviders = await GetInternalAsync(permissionDefinitions.ToArray(), resourceName, resourceKey, providerName, providerKey);
return multiplePermissionWithGrantedProviders.Result;
}
public virtual async Task<List<PermissionProviderWithPermissions>> GetAllGroupAsync(string resourceName, string resourceKey)
{
var resourcePermissions = await GetAvailableResourcePermissionsAsync(resourceName);
var resourcePermissions = await GetAvailablePermissionsAsync(resourceName);
var resourcePermissionGrants = await ResourcePermissionGrantRepository.GetPermissionsAsync(resourceName, resourceKey);
resourcePermissionGrants = resourcePermissionGrants
.Where(x => resourcePermissions.Any(rp => rp.Name == x.Name))
@ -279,7 +302,7 @@ public class ResourcePermissionManager : IResourcePermissionManager, ISingletonD
var neededCheckPermissions = new List<PermissionDefinition>();
var resourcePermissions = await GetAvailableResourcePermissionsAsync(resourceName);
var resourcePermissions = await GetAvailablePermissionsAsync(resourceName);
foreach (var permission in resourcePermissions)
{
if (await SimpleStateCheckerManager.IsEnabledAsync(permission))

16
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/ResourcePermissionProviderKeyInfo.cs

@ -0,0 +1,16 @@
using Volo.Abp.ObjectExtending;
namespace Volo.Abp.PermissionManagement;
public class ResourcePermissionProviderKeyInfo
{
public string ProviderKey { get; set; }
public string ProviderDisplayName { get; set; }
public ResourcePermissionProviderKeyInfo(string providerKey, string providerDisplayName)
{
ProviderKey = providerKey;
ProviderDisplayName = providerDisplayName;
}
}

14
modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/Volo/Abp/PermissionManagement/PermissionsClientProxy.Generated.cs

@ -46,6 +46,20 @@ public partial class PermissionsClientProxy : ClientProxyBase<IPermissionAppServ
});
}
public virtual async Task<GetResourceProviderListResultDto> GetResourceProviderKeyLookupServicesAsync()
{
return await RequestAsync<GetResourceProviderListResultDto>(nameof(GetResourceProviderKeyLookupServicesAsync));
}
public virtual async Task<SearchProviderKeyListResultDto> SearchResourceProviderKeyAsync(string serviceName, string filter)
{
return await RequestAsync<SearchProviderKeyListResultDto>(nameof(SearchResourceProviderKeyAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), serviceName },
{ typeof(string), filter }
});
}
public virtual async Task<GetResourcePermissionDefinitionListResultDto> GetResourceDefinitionsAsync(string resourceName)
{
return await RequestAsync<GetResourcePermissionDefinitionListResultDto>(nameof(GetResourceDefinitionsAsync), new ClientProxyRequestTypeValue

105
modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/permissionManagement-generate-proxy.json

@ -179,6 +179,39 @@
"typeSimple": "System.Void"
}
},
{
"name": "GetResourceProviderKeyLookupServicesAsync",
"parametersOnMethod": [],
"returnValue": {
"type": "Volo.Abp.PermissionManagement.GetResourceProviderListResultDto",
"typeSimple": "Volo.Abp.PermissionManagement.GetResourceProviderListResultDto"
}
},
{
"name": "SearchResourceProviderKeyAsync",
"parametersOnMethod": [
{
"name": "serviceName",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
},
{
"name": "filter",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
}
],
"returnValue": {
"type": "Volo.Abp.PermissionManagement.SearchProviderKeyListResultDto",
"typeSimple": "Volo.Abp.PermissionManagement.SearchProviderKeyListResultDto"
}
},
{
"name": "GetResourceDefinitionsAsync",
"parametersOnMethod": [
@ -551,6 +584,78 @@
"allowAnonymous": null,
"implementFrom": "Volo.Abp.PermissionManagement.IPermissionAppService"
},
"GetResourceProviderKeyLookupServicesAsync": {
"uniqueName": "GetResourceProviderKeyLookupServicesAsync",
"name": "GetResourceProviderKeyLookupServicesAsync",
"httpMethod": "GET",
"url": "api/permission-management/permissions/resource-provider-key-lookup-services",
"supportedVersions": [],
"parametersOnMethod": [],
"parameters": [],
"returnValue": {
"type": "Volo.Abp.PermissionManagement.GetResourceProviderListResultDto",
"typeSimple": "Volo.Abp.PermissionManagement.GetResourceProviderListResultDto"
},
"allowAnonymous": null,
"implementFrom": "Volo.Abp.PermissionManagement.IPermissionAppService"
},
"SearchResourceProviderKeyAsyncByServiceNameAndFilter": {
"uniqueName": "SearchResourceProviderKeyAsyncByServiceNameAndFilter",
"name": "SearchResourceProviderKeyAsync",
"httpMethod": "GET",
"url": "api/permission-management/permissions/search-resource-provider-keys",
"supportedVersions": [],
"parametersOnMethod": [
{
"name": "serviceName",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
},
{
"name": "filter",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
}
],
"parameters": [
{
"nameOnMethod": "serviceName",
"name": "serviceName",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": ""
},
{
"nameOnMethod": "filter",
"name": "filter",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": ""
}
],
"returnValue": {
"type": "Volo.Abp.PermissionManagement.SearchProviderKeyListResultDto",
"typeSimple": "Volo.Abp.PermissionManagement.SearchProviderKeyListResultDto"
},
"allowAnonymous": null,
"implementFrom": "Volo.Abp.PermissionManagement.IPermissionAppService"
},
"GetResourceDefinitionsAsyncByResourceName": {
"uniqueName": "GetResourceDefinitionsAsyncByResourceName",
"name": "GetResourceDefinitionsAsync",

17
modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo/Abp/PermissionManagement/PermissionsController.cs

@ -1,5 +1,4 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc;
@ -36,8 +35,20 @@ public class PermissionsController : AbpControllerBase, IPermissionAppService
return PermissionAppService.UpdateAsync(providerName, providerKey, input);
}
[HttpGet("resource-provider-key-lookup-services")]
public virtual Task<GetResourceProviderListResultDto> GetResourceProviderKeyLookupServicesAsync()
{
return PermissionAppService.GetResourceProviderKeyLookupServicesAsync();
}
[HttpGet("search-resource-provider-keys")]
public virtual Task<SearchProviderKeyListResultDto> SearchResourceProviderKeyAsync(string serviceName, string filter)
{
return PermissionAppService.SearchResourceProviderKeyAsync(serviceName, filter);
}
[HttpGet("resource-definitions")]
public Task<GetResourcePermissionDefinitionListResultDto> GetResourceDefinitionsAsync(string resourceName)
public virtual Task<GetResourcePermissionDefinitionListResultDto> GetResourceDefinitionsAsync(string resourceName)
{
return PermissionAppService.GetResourceDefinitionsAsync(resourceName);
}

15
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/AddResourcePermissionManagementModal.cshtml

@ -29,14 +29,13 @@
<div class="mb-3">
<label class="form-label">ProviderName:</label>
<div class="mb-1">
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" checked name="AddModel.ProviderName" id="UserProvider" value="U">
<label class="form-check-label" for="UserProvider">User</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="AddModel.ProviderName" id="RoleProvider" value="R">
<label class="form-check-label" for="RoleProvider">Role</label>
</div>
@foreach (var provider in Model.ResourceProviders.Providers)
{
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" checked name="AddModel.ProviderName" id="@provider.Name" value="@provider.Name">
<label class="form-check-label" for="@provider.Name">@provider.DisplayName</label>
</div>
}
</div>
</div>
<abp-input asp-for="@Model.AddModel.ProviderKey"/>

2
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/AddResourcePermissionManagementModal.cshtml.cs

@ -26,6 +26,7 @@ public class AddResourcePermissionManagementModal : AbpPageModel
public ResourcePermissionViewModel AddModel { get; set; }
public GetResourcePermissionDefinitionListResultDto ResourcePermissionDefinitions { get; set; }
public GetResourceProviderListResultDto ResourceProviders { get; set; }
protected IPermissionAppService PermissionAppService { get; }
@ -41,6 +42,7 @@ public class AddResourcePermissionManagementModal : AbpPageModel
ValidateModel();
ResourcePermissionDefinitions = await PermissionAppService.GetResourceDefinitionsAsync(ResourceName);
ResourceProviders = await PermissionAppService.GetResourceProviderKeyLookupServicesAsync();
return Page();
}

14
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/wwwroot/client-proxies/permissionManagement-proxy.js

@ -34,6 +34,20 @@
}, ajaxParams));
};
volo.abp.permissionManagement.permissions.getResourceProviderKeyLookupServices = function(ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/permission-management/permissions/resource-provider-key-lookup-services',
type: 'GET'
}, ajaxParams));
};
volo.abp.permissionManagement.permissions.searchResourceProviderKey = function(serviceName, filter, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/permission-management/permissions/search-resource-provider-keys' + abp.utils.buildQueryString([{ name: 'serviceName', value: serviceName }, { name: 'filter', value: filter }]) + '',
type: 'GET'
}, ajaxParams));
};
volo.abp.permissionManagement.permissions.getResourceDefinitions = function(resourceName, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/permission-management/permissions/resource-definitions' + abp.utils.buildQueryString([{ name: 'resourceName', value: resourceName }]) + '',

19
modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/IRoleData.cs

@ -0,0 +1,19 @@
using System;
using Volo.Abp.Data;
namespace Volo.Abp.Users;
public interface IRoleData : IHasExtraProperties
{
Guid Id { get; }
Guid? TenantId { get; }
string Name { get; }
bool IsDefault { get; }
bool IsStatic { get; }
bool IsPublic { get; }
}

57
modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/RoleData.cs

@ -0,0 +1,57 @@
using System;
using JetBrains.Annotations;
using Volo.Abp.Data;
namespace Volo.Abp.Users;
public class RoleData : IRoleData
{
public Guid Id { get; set; }
public Guid? TenantId { get; set; }
public string Name { get; set; }
public bool IsDefault { get; set; }
public bool IsStatic { get; set; }
public bool IsPublic { get; set; }
public ExtraPropertyDictionary ExtraProperties { get; }
public RoleData()
{
}
public RoleData(IRoleData roleData)
{
Id = roleData.Id;
Name = roleData.Name;
IsDefault = roleData.IsDefault;
IsStatic = roleData.IsStatic;
IsPublic = roleData.IsPublic;
TenantId = roleData.TenantId;
ExtraProperties = roleData.ExtraProperties;
}
public RoleData(
Guid id,
[NotNull] string name,
bool isDefault = false,
bool isStatic = false,
bool isPublic = false,
Guid? tenantId = null,
ExtraPropertyDictionary extraProperties = null)
{
Id = id;
Name = name;
Name = name;
IsDefault = isDefault;
IsStatic = isStatic;
IsPublic = isPublic;
TenantId = tenantId;
ExtraProperties = extraProperties;
}
}
Loading…
Cancel
Save