mirror of https://github.com/abpframework/abp.git
9 changed files with 109 additions and 97 deletions
@ -0,0 +1,8 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
|
||||
|
namespace Volo.Abp.Authorization.Permissions.Resources; |
||||
|
|
||||
|
public interface IHasResourcePermissions |
||||
|
{ |
||||
|
public Dictionary<string, bool> ResourcePermissions { get; } |
||||
|
} |
||||
@ -0,0 +1,39 @@ |
|||||
|
using System.Linq; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
|
|
||||
|
namespace Volo.Abp.Authorization.Permissions.Resources; |
||||
|
|
||||
|
public class ResourcePermissionPopulator : ITransientDependency |
||||
|
{ |
||||
|
protected IPermissionDefinitionManager PermissionDefinitionManager { get; } |
||||
|
|
||||
|
protected IResourcePermissionChecker ResourcePermissionChecker { get; } |
||||
|
|
||||
|
public ResourcePermissionPopulator(IPermissionDefinitionManager permissionDefinitionManager, IResourcePermissionChecker resourcePermissionChecker) |
||||
|
{ |
||||
|
PermissionDefinitionManager = permissionDefinitionManager; |
||||
|
ResourcePermissionChecker = resourcePermissionChecker; |
||||
|
} |
||||
|
|
||||
|
public virtual async Task PopulateAsync(IHasResourcePermissions resource, string resourceName, string resourceKey) |
||||
|
{ |
||||
|
Check.NotNull(resource, nameof(resource)); |
||||
|
Check.NotNull(resource.ResourcePermissions, nameof(resource.ResourcePermissions)); |
||||
|
Check.NotNullOrWhiteSpace(resourceName, nameof(resourceName)); |
||||
|
Check.NotNullOrWhiteSpace(resourceKey, nameof(resourceKey)); |
||||
|
|
||||
|
var resopurcePermissionNames = (await PermissionDefinitionManager.GetResourcePermissionsAsync()) |
||||
|
.Where(x => x.ResourceName == resourceName) |
||||
|
.Select(x => x.Name) |
||||
|
.ToArray(); |
||||
|
|
||||
|
var results = await ResourcePermissionChecker.IsGrantedAsync(resopurcePermissionNames, resourceName, resourceKey); |
||||
|
foreach (var resopurcePermission in resopurcePermissionNames) |
||||
|
{ |
||||
|
var hasPermission = results.Result.TryGetValue(resopurcePermission, out var granted) && |
||||
|
granted == PermissionGrantResult.Granted; |
||||
|
resource.ResourcePermissions[resopurcePermission] = hasPermission; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,19 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
using Volo.Abp.Domain.Entities; |
||||
|
|
||||
|
namespace Volo.Abp.Authorization.Permissions.Resources; |
||||
|
|
||||
|
public static class EntityExtensions |
||||
|
{ |
||||
|
public static string GetResourceName(this IEntity entity) |
||||
|
{ |
||||
|
Check.NotNull(entity, nameof(entity)); |
||||
|
return entity.GetType().FullName!; |
||||
|
} |
||||
|
|
||||
|
public static string GetResourceKey(this IEntity entity) |
||||
|
{ |
||||
|
Check.NotNull(entity, nameof(entity)); |
||||
|
return entity.GetKeys().JoinAsString(","); |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue