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