Browse Source

Merge pull request #17342 from abpframework/IPermissionFinder

Introduce `IPermissionFinder`.
pull/17352/head
Halil İbrahim Kalkan 3 years ago
committed by GitHub
parent
commit
400c1fd0fe
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 12
      modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/Integration/IdentityUserIntegrationService.cs
  2. 2
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/Integration/IPermissionIntegrationService.cs
  3. 23
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/Integration/PermissionIntegrationService.cs
  4. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/IPermissionFinder.cs
  5. 4
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/IsGrantedRequest.cs
  6. 4
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/IsGrantedResponse.cs
  7. 26
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/PermissionFinderExtensions.cs
  8. 33
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionFinder.cs
  9. 7
      modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/Volo/Abp/PermissionManagement/Integration/PermissionIntegrationClientProxy.Generated.cs
  10. 24
      modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/permissionManagement-generate-proxy.json
  11. 23
      modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/Volo/Abp/PermissionManagement/HttpClientPermissionFinder.cs
  12. 2
      modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo/Abp/PermissionManagement/Integration/PermissionIntegrationController.cs

12
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 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<string[]> GetRoleNamesAsync(Guid id) public virtual async Task<string[]> GetRoleNamesAsync(Guid id)
{ {
return (await UserRepository.GetRoleNamesAsync(id)).ToArray(); return await UserRoleFinder.GetRoleNamesAsync(id);
} }
} }

2
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] [IntegrationService]
public interface IPermissionIntegrationService : IApplicationService public interface IPermissionIntegrationService : IApplicationService
{ {
Task<ListResultDto<PermissionGrantOutput>> IsGrantedAsync(List<PermissionGrantInput> input); Task<ListResultDto<IsGrantedResponse>> IsGrantedAsync(List<IsGrantedRequest> input);
} }

23
modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/Integration/PermissionIntegrationService.cs

@ -1,35 +1,22 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services; using Volo.Abp.Application.Services;
using Volo.Abp.Authorization.Permissions;
namespace Volo.Abp.PermissionManagement.Integration; namespace Volo.Abp.PermissionManagement.Integration;
[IntegrationService] [IntegrationService]
public class PermissionIntegrationService : ApplicationService, IPermissionIntegrationService 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<ListResultDto<PermissionGrantOutput>> IsGrantedAsync(List<PermissionGrantInput> input) public virtual async Task<ListResultDto<IsGrantedResponse>> IsGrantedAsync(List<IsGrantedRequest> input)
{ {
var result = new List<PermissionGrantOutput>(); return new ListResultDto<IsGrantedResponse>(await PermissionFinder.IsGrantedAsync(input));
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<PermissionGrantOutput>(result);
} }
} }

9
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<List<IsGrantedResponse>> IsGrantedAsync(List<IsGrantedRequest> requests);
}

4
modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/Integration/PermissionGrantInput.cs → modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/IsGrantedRequest.cs

@ -1,8 +1,8 @@
using System; using System;
namespace Volo.Abp.PermissionManagement.Integration; namespace Volo.Abp.PermissionManagement;
public class PermissionGrantInput public class IsGrantedRequest
{ {
public Guid UserId { get; set; } public Guid UserId { get; set; }

4
modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/Integration/PermissionGrantOutput.cs → modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/IsGrantedResponse.cs

@ -1,9 +1,9 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Volo.Abp.PermissionManagement.Integration; namespace Volo.Abp.PermissionManagement;
public class PermissionGrantOutput public class IsGrantedResponse
{ {
public Guid UserId { get; set; } public Guid UserId { get; set; }

26
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<bool> IsGrantedAsync(this IPermissionFinder permissionFinder, Guid userId, string permissionName)
{
return await permissionFinder.IsGrantedAsync(userId, new[] { permissionName });
}
public async static Task<bool> IsGrantedAsync(this IPermissionFinder permissionFinder, Guid userId, string[] permissionNames)
{
return (await permissionFinder.IsGrantedAsync(new List<IsGrantedRequest>
{
new IsGrantedRequest
{
UserId = userId,
PermissionNames = permissionNames
}
})).Any(x => x.UserId == userId && x.Permissions.All(p => permissionNames.Contains(p.Key) && p.Value));
}
}

33
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<List<IsGrantedResponse>> IsGrantedAsync(List<IsGrantedRequest> requests)
{
var result = new List<IsGrantedResponse>();
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;
}
}

7
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;
using Volo.Abp.Http.Client.ClientProxying; using Volo.Abp.Http.Client.ClientProxying;
using Volo.Abp.Http.Modeling; using Volo.Abp.Http.Modeling;
using Volo.Abp.PermissionManagement;
using Volo.Abp.PermissionManagement.Integration; using Volo.Abp.PermissionManagement.Integration;
// ReSharper disable once CheckNamespace // ReSharper disable once CheckNamespace
@ -18,11 +19,11 @@ namespace Volo.Abp.PermissionManagement.Integration;
[IntegrationService] [IntegrationService]
public partial class PermissionIntegrationClientProxy : ClientProxyBase<IPermissionIntegrationService>, IPermissionIntegrationService public partial class PermissionIntegrationClientProxy : ClientProxyBase<IPermissionIntegrationService>, IPermissionIntegrationService
{ {
public virtual async Task<ListResultDto<PermissionGrantOutput>> IsGrantedAsync(List<PermissionGrantInput> input) public virtual async Task<ListResultDto<IsGrantedResponse>> IsGrantedAsync(List<IsGrantedRequest> input)
{ {
return await RequestAsync<ListResultDto<PermissionGrantOutput>>(nameof(IsGrantedAsync), new ClientProxyRequestTypeValue return await RequestAsync<ListResultDto<IsGrantedResponse>>(nameof(IsGrantedAsync), new ClientProxyRequestTypeValue
{ {
{ typeof(List<PermissionGrantInput>), input } { typeof(List<IsGrantedRequest>), input }
}); });
} }
} }

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

@ -231,16 +231,16 @@
"parametersOnMethod": [ "parametersOnMethod": [
{ {
"name": "input", "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", "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<Volo.Abp.PermissionManagement.Integration.PermissionGrantInput>", "type": "System.Collections.Generic.List<Volo.Abp.PermissionManagement.IsGrantedRequest>",
"typeSimple": "[Volo.Abp.PermissionManagement.Integration.PermissionGrantInput]", "typeSimple": "[Volo.Abp.PermissionManagement.IsGrantedRequest]",
"isOptional": false, "isOptional": false,
"defaultValue": null "defaultValue": null
} }
], ],
"returnValue": { "returnValue": {
"type": "Volo.Abp.Application.Dtos.ListResultDto<Volo.Abp.PermissionManagement.Integration.PermissionGrantOutput>", "type": "Volo.Abp.Application.Dtos.ListResultDto<Volo.Abp.PermissionManagement.IsGrantedResponse>",
"typeSimple": "Volo.Abp.Application.Dtos.ListResultDto<Volo.Abp.PermissionManagement.Integration.PermissionGrantOutput>" "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto<Volo.Abp.PermissionManagement.IsGrantedResponse>"
} }
} }
] ]
@ -256,9 +256,9 @@
"parametersOnMethod": [ "parametersOnMethod": [
{ {
"name": "input", "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", "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<Volo.Abp.PermissionManagement.Integration.PermissionGrantInput>", "type": "System.Collections.Generic.List<Volo.Abp.PermissionManagement.IsGrantedRequest>",
"typeSimple": "[Volo.Abp.PermissionManagement.Integration.PermissionGrantInput]", "typeSimple": "[Volo.Abp.PermissionManagement.IsGrantedRequest]",
"isOptional": false, "isOptional": false,
"defaultValue": null "defaultValue": null
} }
@ -268,8 +268,8 @@
"nameOnMethod": "input", "nameOnMethod": "input",
"name": "input", "name": "input",
"jsonName": null, "jsonName": null,
"type": "System.Collections.Generic.List<Volo.Abp.PermissionManagement.Integration.PermissionGrantInput>", "type": "System.Collections.Generic.List<Volo.Abp.PermissionManagement.IsGrantedRequest>",
"typeSimple": "[Volo.Abp.PermissionManagement.Integration.PermissionGrantInput]", "typeSimple": "[Volo.Abp.PermissionManagement.IsGrantedRequest]",
"isOptional": false, "isOptional": false,
"defaultValue": null, "defaultValue": null,
"constraintTypes": null, "constraintTypes": null,
@ -278,8 +278,8 @@
} }
], ],
"returnValue": { "returnValue": {
"type": "Volo.Abp.Application.Dtos.ListResultDto<Volo.Abp.PermissionManagement.Integration.PermissionGrantOutput>", "type": "Volo.Abp.Application.Dtos.ListResultDto<Volo.Abp.PermissionManagement.IsGrantedResponse>",
"typeSimple": "Volo.Abp.Application.Dtos.ListResultDto<Volo.Abp.PermissionManagement.Integration.PermissionGrantOutput>" "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto<Volo.Abp.PermissionManagement.IsGrantedResponse>"
}, },
"allowAnonymous": null, "allowAnonymous": null,
"implementFrom": "Volo.Abp.PermissionManagement.Integration.IPermissionIntegrationService" "implementFrom": "Volo.Abp.PermissionManagement.Integration.IPermissionIntegrationService"

23
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<List<IsGrantedResponse>> IsGrantedAsync(List<IsGrantedRequest> requests)
{
return (await PermissionIntegrationService.IsGrantedAsync(requests)).Items.ToList();
}
}

2
modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo/Abp/PermissionManagement/Integration/PermissionIntegrationController.cs

@ -21,7 +21,7 @@ public class PermissionIntegrationController: AbpControllerBase, IPermissionInte
[HttpGet] [HttpGet]
[Route("is-granted")] [Route("is-granted")]
public virtual Task<ListResultDto<PermissionGrantOutput>> IsGrantedAsync(List<PermissionGrantInput> input) public virtual Task<ListResultDto<IsGrantedResponse>> IsGrantedAsync(List<IsGrantedRequest> input)
{ {
return PermissionIntegrationService.IsGrantedAsync(input); return PermissionIntegrationService.IsGrantedAsync(input);
} }

Loading…
Cancel
Save