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..9b28a7c200 --- /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 requests); +} 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..a1a1d8782c --- /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 requests) + { + var result = new List(); + foreach (var item in requests) + { + 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..f62bfaf29b --- /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 requests) + { + return (await PermissionIntegrationService.IsGrantedAsync(requests)).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); }