mirror of https://github.com/abpframework/abp.git
13 changed files with 240 additions and 73 deletions
@ -0,0 +1,21 @@ |
|||||
|
using JetBrains.Annotations; |
||||
|
using Microsoft.AspNetCore.Authorization; |
||||
|
|
||||
|
namespace Volo.Abp.Authorization; |
||||
|
|
||||
|
public class ResourcePermissionRequirement : IAuthorizationRequirement |
||||
|
{ |
||||
|
public string PermissionName { get; } |
||||
|
|
||||
|
public ResourcePermissionRequirement([NotNull] string permissionName) |
||||
|
{ |
||||
|
Check.NotNull(permissionName, nameof(permissionName)); |
||||
|
|
||||
|
PermissionName = permissionName; |
||||
|
} |
||||
|
|
||||
|
public override string ToString() |
||||
|
{ |
||||
|
return $"ResourcePermissionRequirement: {PermissionName}"; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,13 @@ |
|||||
|
using Microsoft.AspNetCore.Authorization; |
||||
|
using Volo.Abp.Authorization.Permissions.Resources; |
||||
|
|
||||
|
namespace Microsoft.Extensions.DependencyInjection; |
||||
|
|
||||
|
public static class ResourcePermissionExtenstions |
||||
|
{ |
||||
|
public static IServiceCollection AddEntityResourcePermissionAuthorization(this IServiceCollection services) |
||||
|
{ |
||||
|
services.AddSingleton<IAuthorizationHandler, EntityResourcePermissionRequirementHandler>(); |
||||
|
return services; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,30 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
using System.Threading.Tasks; |
||||
|
using Microsoft.AspNetCore.Authorization; |
||||
|
using Volo.Abp.Domain.Entities; |
||||
|
|
||||
|
namespace Volo.Abp.Authorization.Permissions.Resources; |
||||
|
|
||||
|
public class EntityResourcePermissionRequirementHandler : AuthorizationHandler<ResourcePermissionRequirement, IEntity> |
||||
|
{ |
||||
|
protected readonly IResourcePermissionChecker PermissionChecker; |
||||
|
|
||||
|
protected EntityResourcePermissionRequirementHandler(IResourcePermissionChecker permissionChecker) |
||||
|
{ |
||||
|
PermissionChecker = permissionChecker; |
||||
|
} |
||||
|
protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, ResourcePermissionRequirement requirement, IEntity? resource) |
||||
|
{ |
||||
|
if (resource == null) |
||||
|
{ |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
var resourceName = resource.GetType().FullName!; |
||||
|
var resourceKey = resource.GetKeys().JoinAsString(","); |
||||
|
if (await PermissionChecker.IsGrantedAsync(context.User, requirement.PermissionName, resourceName, resourceKey)) |
||||
|
{ |
||||
|
context.Succeed(requirement); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue