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 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.Threading.Tasks;
using Volo.Abp.DependencyInjection;
@ -10,30 +11,43 @@ public class ResourcePermissionPopulator : ITransientDependency
protected IResourcePermissionChecker ResourcePermissionChecker { get; }
public ResourcePermissionPopulator(IPermissionDefinitionManager permissionDefinitionManager, IResourcePermissionChecker resourcePermissionChecker)
protected IResourcePermissionStore ResourcePermissionStore { get; }
public ResourcePermissionPopulator(
IPermissionDefinitionManager permissionDefinitionManager,
IResourcePermissionChecker resourcePermissionChecker,
IResourcePermissionStore resourcePermissionStore)
{
PermissionDefinitionManager = permissionDefinitionManager;
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(resource.ResourcePermissions, nameof(resource.ResourcePermissions));
Check.NotNull(resources, nameof(resources));
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)
foreach (var resource in resources)
{
var hasPermission = results.Result.TryGetValue(resopurcePermission, out var granted) &&
granted == PermissionGrantResult.Granted;
resource.ResourcePermissions[resopurcePermission] = hasPermission;
var results = await ResourcePermissionChecker.IsGrantedAsync(resopurcePermissionNames, resourceName, resource.GetResourceKey());
foreach (var resopurcePermission in resopurcePermissionNames)
{
var hasPermission = results.Result.TryGetValue(resopurcePermission, out var granted) && granted == PermissionGrantResult.Granted;
resource.ResourcePermissions[resopurcePermission] = hasPermission;
}
}
}
}

Loading…
Cancel
Save