Browse Source

Refactor resource permission population logic

pull/24374/head
maliming 10 months ago
parent
commit
3925ba39c8
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 2
      framework/src/Volo.Abp.Authorization.Abstractions/Volo/Abp/Authorization/Permissions/Resources/IHasResourcePermissions.cs
  2. 34
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionPopulator.cs

2
framework/src/Volo.Abp.Authorization.Abstractions/Volo/Abp/Authorization/Permissions/Resources/IHasResourcePermissions.cs

@ -5,4 +5,6 @@ namespace Volo.Abp.Authorization.Permissions.Resources;
public interface IHasResourcePermissions public interface IHasResourcePermissions
{ {
public Dictionary<string, bool> ResourcePermissions { get; } public Dictionary<string, bool> ResourcePermissions { get; }
string GetResourceKey();
} }

34
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionPopulator.cs

@ -1,3 +1,4 @@
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
@ -10,30 +11,43 @@ public class ResourcePermissionPopulator : ITransientDependency
protected IResourcePermissionChecker ResourcePermissionChecker { get; } protected IResourcePermissionChecker ResourcePermissionChecker { get; }
public ResourcePermissionPopulator(IPermissionDefinitionManager permissionDefinitionManager, IResourcePermissionChecker resourcePermissionChecker) protected IResourcePermissionStore ResourcePermissionStore { get; }
public ResourcePermissionPopulator(
IPermissionDefinitionManager permissionDefinitionManager,
IResourcePermissionChecker resourcePermissionChecker,
IResourcePermissionStore resourcePermissionStore)
{ {
PermissionDefinitionManager = permissionDefinitionManager; PermissionDefinitionManager = permissionDefinitionManager;
ResourcePermissionChecker = resourcePermissionChecker; ResourcePermissionChecker = resourcePermissionChecker;
ResourcePermissionStore = resourcePermissionStore;
}
public virtual async Task PopulateAsync<TResource>(TResource resource, string resourceName)
where TResource : IHasResourcePermissions
{
await PopulateAsync([resource], resourceName);
} }
public virtual async Task PopulateAsync(IHasResourcePermissions resource, string resourceName, string resourceKey) public virtual async Task PopulateAsync<TResource>(List<TResource> resources, string resourceName)
where TResource : IHasResourcePermissions
{ {
Check.NotNull(resource, nameof(resource)); Check.NotNull(resources, nameof(resources));
Check.NotNull(resource.ResourcePermissions, nameof(resource.ResourcePermissions));
Check.NotNullOrWhiteSpace(resourceName, nameof(resourceName)); Check.NotNullOrWhiteSpace(resourceName, nameof(resourceName));
Check.NotNullOrWhiteSpace(resourceKey, nameof(resourceKey));
var resopurcePermissionNames = (await PermissionDefinitionManager.GetResourcePermissionsAsync()) var resopurcePermissionNames = (await PermissionDefinitionManager.GetResourcePermissionsAsync())
.Where(x => x.ResourceName == resourceName) .Where(x => x.ResourceName == resourceName)
.Select(x => x.Name) .Select(x => x.Name)
.ToArray(); .ToArray();
var results = await ResourcePermissionChecker.IsGrantedAsync(resopurcePermissionNames, resourceName, resourceKey); foreach (var resource in resources)
foreach (var resopurcePermission in resopurcePermissionNames)
{ {
var hasPermission = results.Result.TryGetValue(resopurcePermission, out var granted) && var results = await ResourcePermissionChecker.IsGrantedAsync(resopurcePermissionNames, resourceName, resource.GetResourceKey());
granted == PermissionGrantResult.Granted; foreach (var resopurcePermission in resopurcePermissionNames)
resource.ResourcePermissions[resopurcePermission] = hasPermission; {
var hasPermission = results.Result.TryGetValue(resopurcePermission, out var granted) && granted == PermissionGrantResult.Granted;
resource.ResourcePermissions[resopurcePermission] = hasPermission;
}
} }
} }
} }

Loading…
Cancel
Save