From 2bc023ba620741214ccadb3f47bb2f25d65f1d0f Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 10 Aug 2023 18:19:53 +0800 Subject: [PATCH 1/2] Introduce `IPermissionFinder`. --- .../IdentityUserIntegrationService.cs | 12 +++---- .../IPermissionIntegrationService.cs | 2 +- .../PermissionIntegrationService.cs | 23 +++---------- .../PermissionManagement/IPermissionFinder.cs | 9 +++++ .../PermissionManagement/IsGrantedRequest.cs} | 4 +-- .../IsGrantedResponse.cs} | 4 +-- .../PermissionFinderExtensions.cs | 26 +++++++++++++++ .../PermissionManagement/PermissionFinder.cs | 33 +++++++++++++++++++ ...missionIntegrationClientProxy.Generated.cs | 7 ++-- .../permissionManagement-generate-proxy.json | 24 +++++++------- .../HttpClientPermissionFinder.cs | 23 +++++++++++++ .../PermissionIntegrationController.cs | 2 +- 12 files changed, 124 insertions(+), 45 deletions(-) create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/IPermissionFinder.cs rename modules/permission-management/src/{Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/Integration/PermissionGrantInput.cs => Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/IsGrantedRequest.cs} (55%) rename modules/permission-management/src/{Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/Integration/PermissionGrantOutput.cs => Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/IsGrantedResponse.cs} (63%) create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/PermissionFinderExtensions.cs create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionFinder.cs create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/Volo/Abp/PermissionManagement/HttpClientPermissionFinder.cs diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/Integration/IdentityUserIntegrationService.cs b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/Integration/IdentityUserIntegrationService.cs index 5b95d40c9d..b18f58f3a5 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/Integration/IdentityUserIntegrationService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/Integration/IdentityUserIntegrationService.cs @@ -5,15 +5,15 @@ namespace Volo.Abp.Identity.Integration; public class IdentityUserIntegrationService : IdentityAppServiceBase, IIdentityUserIntegrationService { - protected IIdentityUserRepository UserRepository { get; } + protected IUserRoleFinder UserRoleFinder { get; } - public IdentityUserIntegrationService(IIdentityUserRepository userRepository) + public IdentityUserIntegrationService(IUserRoleFinder userRoleFinder) { - UserRepository = userRepository; + UserRoleFinder = userRoleFinder; } - public async Task GetRoleNamesAsync(Guid id) + public virtual async Task GetRoleNamesAsync(Guid id) { - return (await UserRepository.GetRoleNamesAsync(id)).ToArray(); + return await UserRoleFinder.GetRoleNamesAsync(id); } -} \ No newline at end of file +} diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/Integration/IPermissionIntegrationService.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/Integration/IPermissionIntegrationService.cs index 25b35d87c3..912fd4abdc 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/Integration/IPermissionIntegrationService.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/Integration/IPermissionIntegrationService.cs @@ -8,5 +8,5 @@ namespace Volo.Abp.PermissionManagement.Integration; [IntegrationService] public interface IPermissionIntegrationService : IApplicationService { - Task> IsGrantedAsync(List input); + Task> IsGrantedAsync(List input); } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/Integration/PermissionIntegrationService.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/Integration/PermissionIntegrationService.cs index 319619efc7..e7cef44c01 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/Integration/PermissionIntegrationService.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/Integration/PermissionIntegrationService.cs @@ -1,35 +1,22 @@ using System.Collections.Generic; -using System.Linq; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; -using Volo.Abp.Authorization.Permissions; namespace Volo.Abp.PermissionManagement.Integration; [IntegrationService] public class PermissionIntegrationService : ApplicationService, IPermissionIntegrationService { - protected IPermissionManager PermissionManager { get; } + protected IPermissionFinder PermissionFinder { get; } - public PermissionIntegrationService(IPermissionManager permissionManager) + public PermissionIntegrationService(IPermissionFinder permissionFinder) { - PermissionManager = permissionManager; + PermissionFinder = permissionFinder; } - public virtual async Task> IsGrantedAsync(List input) + public virtual async Task> IsGrantedAsync(List input) { - var result = new List(); - foreach (var item in input) - { - result.Add(new PermissionGrantOutput - { - UserId = item.UserId, - Permissions = (await PermissionManager.GetAsync(item.PermissionNames, UserPermissionValueProvider.ProviderName, item.UserId.ToString())).Result - .ToDictionary(x => x.Name, x => x.IsGranted) - }); - } - - return new ListResultDto(result); + return new ListResultDto(await PermissionFinder.IsGrantedAsync(input)); } } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/IPermissionFinder.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/IPermissionFinder.cs new file mode 100644 index 0000000000..805a1549d7 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/IPermissionFinder.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Volo.Abp.PermissionManagement; + +public interface IPermissionFinder +{ + Task> IsGrantedAsync(List input); +} diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/Integration/PermissionGrantInput.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/IsGrantedRequest.cs similarity index 55% rename from modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/Integration/PermissionGrantInput.cs rename to modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/IsGrantedRequest.cs index d5639f8b22..e7cb3f92bb 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/Integration/PermissionGrantInput.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/IsGrantedRequest.cs @@ -1,8 +1,8 @@ using System; -namespace Volo.Abp.PermissionManagement.Integration; +namespace Volo.Abp.PermissionManagement; -public class PermissionGrantInput +public class IsGrantedRequest { public Guid UserId { get; set; } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/Integration/PermissionGrantOutput.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/IsGrantedResponse.cs similarity index 63% rename from modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/Integration/PermissionGrantOutput.cs rename to modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/IsGrantedResponse.cs index 613c7407bf..4cc8d07594 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/Integration/PermissionGrantOutput.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/IsGrantedResponse.cs @@ -1,9 +1,9 @@ using System; using System.Collections.Generic; -namespace Volo.Abp.PermissionManagement.Integration; +namespace Volo.Abp.PermissionManagement; -public class PermissionGrantOutput +public class IsGrantedResponse { public Guid UserId { get; set; } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/PermissionFinderExtensions.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/PermissionFinderExtensions.cs new file mode 100644 index 0000000000..d7e9f7c144 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/PermissionFinderExtensions.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Volo.Abp.PermissionManagement; + +public static class PermissionFinderExtensions +{ + public async static Task IsGrantedAsync(this IPermissionFinder permissionFinder, Guid userId, string permissionName) + { + return await permissionFinder.IsGrantedAsync(userId, new[] { permissionName }); + } + + public async static Task IsGrantedAsync(this IPermissionFinder permissionFinder, Guid userId, string[] permissionNames) + { + return (await permissionFinder.IsGrantedAsync(new List + { + new IsGrantedRequest + { + UserId = userId, + PermissionNames = permissionNames + } + })).Any(x => x.UserId == userId && x.Permissions.All(p => permissionNames.Contains(p.Key) && p.Value)); + } +} diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionFinder.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionFinder.cs new file mode 100644 index 0000000000..39adbe9903 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionFinder.cs @@ -0,0 +1,33 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.PermissionManagement; + +public class PermissionFinder : IPermissionFinder, ITransientDependency +{ + protected IPermissionManager PermissionManager { get; } + + public PermissionFinder(IPermissionManager permissionManager) + { + PermissionManager = permissionManager; + } + + public virtual async Task> IsGrantedAsync(List input) + { + var result = new List(); + foreach (var item in input) + { + result.Add(new IsGrantedResponse + { + UserId = item.UserId, + Permissions = (await PermissionManager.GetAsync(item.PermissionNames, UserPermissionValueProvider.ProviderName, item.UserId.ToString())).Result + .ToDictionary(x => x.Name, x => x.IsGranted) + }); + } + + return result; + } +} diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/Volo/Abp/PermissionManagement/Integration/PermissionIntegrationClientProxy.Generated.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/Volo/Abp/PermissionManagement/Integration/PermissionIntegrationClientProxy.Generated.cs index a3e4537729..e609f0df4d 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/Volo/Abp/PermissionManagement/Integration/PermissionIntegrationClientProxy.Generated.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/Volo/Abp/PermissionManagement/Integration/PermissionIntegrationClientProxy.Generated.cs @@ -8,6 +8,7 @@ using Volo.Abp.DependencyInjection; using Volo.Abp.Http.Client; using Volo.Abp.Http.Client.ClientProxying; using Volo.Abp.Http.Modeling; +using Volo.Abp.PermissionManagement; using Volo.Abp.PermissionManagement.Integration; // ReSharper disable once CheckNamespace @@ -18,11 +19,11 @@ namespace Volo.Abp.PermissionManagement.Integration; [IntegrationService] public partial class PermissionIntegrationClientProxy : ClientProxyBase, IPermissionIntegrationService { - public virtual async Task> IsGrantedAsync(List input) + public virtual async Task> IsGrantedAsync(List input) { - return await RequestAsync>(nameof(IsGrantedAsync), new ClientProxyRequestTypeValue + return await RequestAsync>(nameof(IsGrantedAsync), new ClientProxyRequestTypeValue { - { typeof(List), input } + { typeof(List), input } }); } } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/permissionManagement-generate-proxy.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/permissionManagement-generate-proxy.json index ffad289f5a..2a57defab4 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/permissionManagement-generate-proxy.json +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/permissionManagement-generate-proxy.json @@ -231,16 +231,16 @@ "parametersOnMethod": [ { "name": "input", - "typeAsString": "System.Collections.Generic.List`1[[Volo.Abp.PermissionManagement.Integration.PermissionGrantInput, Volo.Abp.PermissionManagement.Application.Contracts, Version=7.4.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib", - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.Abp.PermissionManagement.Integration.PermissionGrantInput]", + "typeAsString": "System.Collections.Generic.List`1[[Volo.Abp.PermissionManagement.IsGrantedRequest, Volo.Abp.PermissionManagement.Domain.Shared, Version=7.4.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib", + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.PermissionManagement.IsGrantedRequest]", "isOptional": false, "defaultValue": null } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.ListResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" } } ] @@ -256,9 +256,9 @@ "parametersOnMethod": [ { "name": "input", - "typeAsString": "System.Collections.Generic.List`1[[Volo.Abp.PermissionManagement.Integration.PermissionGrantInput, Volo.Abp.PermissionManagement.Application.Contracts, Version=7.4.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib", - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.Abp.PermissionManagement.Integration.PermissionGrantInput]", + "typeAsString": "System.Collections.Generic.List`1[[Volo.Abp.PermissionManagement.IsGrantedRequest, Volo.Abp.PermissionManagement.Domain.Shared, Version=7.4.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib", + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.PermissionManagement.IsGrantedRequest]", "isOptional": false, "defaultValue": null } @@ -268,8 +268,8 @@ "nameOnMethod": "input", "name": "input", "jsonName": null, - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.Abp.PermissionManagement.Integration.PermissionGrantInput]", + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.PermissionManagement.IsGrantedRequest]", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -278,8 +278,8 @@ } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.ListResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" }, "allowAnonymous": null, "implementFrom": "Volo.Abp.PermissionManagement.Integration.IPermissionIntegrationService" diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/Volo/Abp/PermissionManagement/HttpClientPermissionFinder.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/Volo/Abp/PermissionManagement/HttpClientPermissionFinder.cs new file mode 100644 index 0000000000..d6da602a4b --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/Volo/Abp/PermissionManagement/HttpClientPermissionFinder.cs @@ -0,0 +1,23 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.PermissionManagement.Integration; + +namespace Volo.Abp.PermissionManagement; + +[Dependency(TryRegister = true)] +public class HttpClientPermissionFinder : IPermissionFinder, ITransientDependency +{ + protected IPermissionIntegrationService PermissionIntegrationService { get; } + + public HttpClientPermissionFinder(IPermissionIntegrationService permissionIntegrationService) + { + PermissionIntegrationService = permissionIntegrationService; + } + + public virtual async Task> IsGrantedAsync(List input) + { + return (await PermissionIntegrationService.IsGrantedAsync(input)).Items.ToList(); + } +} diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo/Abp/PermissionManagement/Integration/PermissionIntegrationController.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo/Abp/PermissionManagement/Integration/PermissionIntegrationController.cs index f6adff7300..48ba4b9541 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo/Abp/PermissionManagement/Integration/PermissionIntegrationController.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo/Abp/PermissionManagement/Integration/PermissionIntegrationController.cs @@ -21,7 +21,7 @@ public class PermissionIntegrationController: AbpControllerBase, IPermissionInte [HttpGet] [Route("is-granted")] - public virtual Task> IsGrantedAsync(List input) + public virtual Task> IsGrantedAsync(List input) { return PermissionIntegrationService.IsGrantedAsync(input); } From 38b96ec9b6dc05d820dd06711b6907367ab94541 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 10 Aug 2023 21:05:46 +0800 Subject: [PATCH 2/2] Rename the parameter name. --- .../Volo/Abp/PermissionManagement/IPermissionFinder.cs | 2 +- .../Volo/Abp/PermissionManagement/PermissionFinder.cs | 4 ++-- .../Abp/PermissionManagement/HttpClientPermissionFinder.cs | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/IPermissionFinder.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/IPermissionFinder.cs index 805a1549d7..9b28a7c200 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/IPermissionFinder.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/IPermissionFinder.cs @@ -5,5 +5,5 @@ namespace Volo.Abp.PermissionManagement; public interface IPermissionFinder { - Task> IsGrantedAsync(List input); + Task> IsGrantedAsync(List requests); } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionFinder.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionFinder.cs index 39adbe9903..a1a1d8782c 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionFinder.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionFinder.cs @@ -15,10 +15,10 @@ public class PermissionFinder : IPermissionFinder, ITransientDependency PermissionManager = permissionManager; } - public virtual async Task> IsGrantedAsync(List input) + public virtual async Task> IsGrantedAsync(List requests) { var result = new List(); - foreach (var item in input) + foreach (var item in requests) { result.Add(new IsGrantedResponse { diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/Volo/Abp/PermissionManagement/HttpClientPermissionFinder.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/Volo/Abp/PermissionManagement/HttpClientPermissionFinder.cs index d6da602a4b..f62bfaf29b 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/Volo/Abp/PermissionManagement/HttpClientPermissionFinder.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/Volo/Abp/PermissionManagement/HttpClientPermissionFinder.cs @@ -16,8 +16,8 @@ public class HttpClientPermissionFinder : IPermissionFinder, ITransientDependenc PermissionIntegrationService = permissionIntegrationService; } - public virtual async Task> IsGrantedAsync(List input) + public virtual async Task> IsGrantedAsync(List requests) { - return (await PermissionIntegrationService.IsGrantedAsync(input)).Items.ToList(); + return (await PermissionIntegrationService.IsGrantedAsync(requests)).Items.ToList(); } }