From 3925ba39c85f2a6b4f4b60e37272396aceb6f006 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 20 Nov 2025 11:22:32 +0800 Subject: [PATCH] Refactor resource permission population logic --- .../Resources/IHasResourcePermissions.cs | 2 ++ .../Resources/ResourcePermissionPopulator.cs | 34 +++++++++++++------ 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/framework/src/Volo.Abp.Authorization.Abstractions/Volo/Abp/Authorization/Permissions/Resources/IHasResourcePermissions.cs b/framework/src/Volo.Abp.Authorization.Abstractions/Volo/Abp/Authorization/Permissions/Resources/IHasResourcePermissions.cs index 971b326d77..128c3065fd 100644 --- a/framework/src/Volo.Abp.Authorization.Abstractions/Volo/Abp/Authorization/Permissions/Resources/IHasResourcePermissions.cs +++ b/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 ResourcePermissions { get; } + + string GetResourceKey(); } diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionPopulator.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionPopulator.cs index bc30fd20ab..efc0eddd42 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionPopulator.cs +++ b/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 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(List 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; + } } } }