Browse Source
feat(permission-management): update resource permission handling and improve resource key usage in identity role and user management
pull/24374/head
maliming
10 months ago
No known key found for this signature in database
GPG Key ID: A646B9CB645ECEA4
5 changed files with
15 additions and
6 deletions
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationPolicyProvider.cs
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionChecker.cs
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionValueProviderManager.cs
modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js
modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js
@ -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 < string > ( ) ) ;
policyBuilder . Requirements . Add ( new ResourcePermissionRequirement ( policyName ) ) ;
return policyBuilder . Build ( ) ;
}
return null ;
}
@ -45,7 +45,7 @@ public class ResourcePermissionChecker : IResourcePermissionChecker, ITransientD
{
Check . NotNull ( name , nameof ( name ) ) ;
var permission = await PermissionDefinitionManager . GetOrNullAsync ( name ) ;
var permission = await PermissionDefinitionManager . GetResourcePermission OrNullAsync ( name ) ;
if ( permission = = null )
{
return false ;
@ -115,7 +115,7 @@ public class ResourcePermissionChecker : IResourcePermissionChecker, ITransientD
var permissionDefinitions = new List < PermissionDefinition > ( ) ;
foreach ( var name in names )
{
var permission = await PermissionDefinitionManager . GetOrNullAsync ( name ) ;
var permission = await PermissionDefinitionManager . GetResourcePermission OrNullAsync ( name ) ;
if ( permission = = null )
{
result . Result . Add ( name , PermissionGrantResult . Prohibited ) ;
@ -28,14 +28,14 @@ public class ResourcePermissionValueProviderManager : IResourcePermissionValuePr
protected virtual List < IResourcePermissionValueProvider > GetProviders ( )
{
var providers = Options
. ValueProviders
. Resource ValueProviders
. 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 ;
@ -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)'
} ) ;
} ,
@ -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)'
} ) ;
} ,