From 2844e595900222a687f9902c1df422cf33be9842 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 18 Nov 2025 15:55:12 +0800 Subject: [PATCH] feat(permission-management): update resource permission handling and improve resource key usage in identity role and user management --- .../Abp/Authorization/AbpAuthorizationPolicyProvider.cs | 9 +++++++++ .../Permissions/Resources/ResourcePermissionChecker.cs | 4 ++-- .../Resources/ResourcePermissionValueProviderManager.cs | 4 ++-- .../Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js | 2 +- .../Volo.Abp.Identity.Web/Pages/Identity/Users/index.js | 2 +- 5 files changed, 15 insertions(+), 6 deletions(-) diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationPolicyProvider.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationPolicyProvider.cs index 7958f2a979..0792044ba3 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationPolicyProvider.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationPolicyProvider.cs @@ -40,6 +40,15 @@ public class AbpAuthorizationPolicyProvider : DefaultAuthorizationPolicyProvider return policyBuilder.Build(); } + var resourcePermission = await _permissionDefinitionManager.GetResourcePermissionOrNullAsync(policyName); + if (resourcePermission != null) + { + //TODO: Optimize & Cache! + var policyBuilder = new AuthorizationPolicyBuilder(Array.Empty()); + policyBuilder.Requirements.Add(new ResourcePermissionRequirement(policyName)); + return policyBuilder.Build(); + } + return null; } diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionChecker.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionChecker.cs index 09b2e7c3bc..67cf436184 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionChecker.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionChecker.cs @@ -45,7 +45,7 @@ public class ResourcePermissionChecker : IResourcePermissionChecker, ITransientD { Check.NotNull(name, nameof(name)); - var permission = await PermissionDefinitionManager.GetOrNullAsync(name); + var permission = await PermissionDefinitionManager.GetResourcePermissionOrNullAsync(name); if (permission == null) { return false; @@ -115,7 +115,7 @@ public class ResourcePermissionChecker : IResourcePermissionChecker, ITransientD var permissionDefinitions = new List(); foreach (var name in names) { - var permission = await PermissionDefinitionManager.GetOrNullAsync(name); + var permission = await PermissionDefinitionManager.GetResourcePermissionOrNullAsync(name); if (permission == null) { result.Result.Add(name, PermissionGrantResult.Prohibited); diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionValueProviderManager.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionValueProviderManager.cs index 628893397e..bab3180fea 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionValueProviderManager.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionValueProviderManager.cs @@ -28,14 +28,14 @@ public class ResourcePermissionValueProviderManager : IResourcePermissionValuePr protected virtual List GetProviders() { var providers = Options - .ValueProviders + .ResourceValueProviders .Select(type => (ServiceProvider.GetRequiredService(type) as IResourcePermissionValueProvider)!) .ToList(); var multipleProviders = providers.GroupBy(p => p.Name).FirstOrDefault(x => x.Count() > 1); if(multipleProviders != null) { - throw new AbpException($"Duplicate permission value provider name detected: {multipleProviders.Key}. Providers:{Environment.NewLine}{multipleProviders.Select(p => p.GetType().FullName!).JoinAsString(Environment.NewLine)}"); + throw new AbpException($"Duplicate resource permission value provider name detected: {multipleProviders.Key}. Providers:{Environment.NewLine}{multipleProviders.Select(p => p.GetType().FullName!).JoinAsString(Environment.NewLine)}"); } return providers; diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js index 9197a4eb1d..5c9696520c 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js @@ -52,7 +52,7 @@ action: function (data) { _resourcePermissionsModal.open({ resourceName: 'Volo.Abp.Identity.IdentityRole', - resourceKey: data.record.name, + resourceKey: data.record.id, resourceDisplayName: data.record.name + '(Volo.Abp.Identity.IdentityRole)' }); }, diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js index 053b4b337e..907749c8e4 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js @@ -90,7 +90,7 @@ action: function (data) { _resourcePermissionsModal.open({ resourceName: 'Volo.Abp.Identity.IdentityUser', - resourceKey: data.record.name, + resourceKey: data.record.id, resourceDisplayName: data.record.name + '(Volo.Abp.Identity.IdentityUser)' }); },