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
parent
commit
2844e59590
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 9
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationPolicyProvider.cs
  2. 4
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionChecker.cs
  3. 4
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionValueProviderManager.cs
  4. 2
      modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js
  5. 2
      modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js

9
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<string>());
policyBuilder.Requirements.Add(new ResourcePermissionRequirement(policyName));
return policyBuilder.Build();
}
return null;
}

4
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<PermissionDefinition>();
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);

4
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionValueProviderManager.cs

@ -28,14 +28,14 @@ public class ResourcePermissionValueProviderManager : IResourcePermissionValuePr
protected virtual List<IResourcePermissionValueProvider> 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;

2
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)'
});
},

2
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)'
});
},

Loading…
Cancel
Save