From 7500ec549072db546a00376d21f6eb8968173f2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 27 Nov 2025 18:13:35 +0300 Subject: [PATCH] Make EntityResourcePermissionRequirementHandler --- ...sourcePermissionAuthorizationExtensions.cs | 4 +-- .../Permissions/Resources/EntityExtensions.cs | 19 ----------- ...ityResourcePermissionRequirementHandler.cs | 30 ---------------- ...ectResourcePermissionCheckerExtensions.cs} | 19 +++++------ ...ectResourcePermissionRequirementHandler.cs | 34 +++++++++++++++++++ ...bjectResourcePermissionStoreExtensions.cs} | 18 +++++----- .../Volo/Abp/Domain/AbpDddDomainModule.cs | 2 +- 7 files changed, 55 insertions(+), 71 deletions(-) delete mode 100644 framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/EntityExtensions.cs delete mode 100644 framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/EntityResourcePermissionRequirementHandler.cs rename framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/{EntityResourcePermissionCheckerExtensions.cs => KeyedObjectResourcePermissionCheckerExtensions.cs} (56%) create mode 100644 framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/KeyedObjectResourcePermissionRequirementHandler.cs rename framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/{EntityResourcePermissionStoreExtensions.cs => KeyedObjectResourcePermissionStoreExtensions.cs} (76%) diff --git a/framework/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/EntityResourcePermissionAuthorizationExtensions.cs b/framework/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/EntityResourcePermissionAuthorizationExtensions.cs index e392d6378d..3f6d2d1bfa 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/EntityResourcePermissionAuthorizationExtensions.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/EntityResourcePermissionAuthorizationExtensions.cs @@ -5,9 +5,9 @@ namespace Microsoft.Extensions.DependencyInjection; public static class ResourcePermissionExtenstions { - public static IServiceCollection AddEntityResourcePermissionAuthorization(this IServiceCollection services) + public static IServiceCollection AddKeyedObjectResourcePermissionAuthorization(this IServiceCollection services) { - services.AddSingleton(); + services.AddSingleton(); return services; } } diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/EntityExtensions.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/EntityExtensions.cs deleted file mode 100644 index 737cb95077..0000000000 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/EntityExtensions.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Collections.Generic; -using Volo.Abp.Domain.Entities; - -namespace Volo.Abp.Authorization.Permissions.Resources; - -public static class EntityExtensions -{ - public static string GetResourceName(this IEntity entity) - { - Check.NotNull(entity, nameof(entity)); - return entity.GetType().FullName!; - } - - public static string GetResourceKey(this IEntity entity) - { - Check.NotNull(entity, nameof(entity)); - return entity.GetKeys().JoinAsString(","); - } -} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/EntityResourcePermissionRequirementHandler.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/EntityResourcePermissionRequirementHandler.cs deleted file mode 100644 index 9fe07efde9..0000000000 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/EntityResourcePermissionRequirementHandler.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Threading.Tasks; -using Microsoft.AspNetCore.Authorization; -using Volo.Abp.Domain.Entities; - -namespace Volo.Abp.Authorization.Permissions.Resources; - -public class EntityResourcePermissionRequirementHandler : AuthorizationHandler -{ - protected readonly IResourcePermissionChecker PermissionChecker; - - public EntityResourcePermissionRequirementHandler(IResourcePermissionChecker permissionChecker) - { - PermissionChecker = permissionChecker; - } - - protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, ResourcePermissionRequirement requirement, IEntity? resource) - { - if (resource == null) - { - return; - } - - var resourceName = resource.GetResourceName(); - var resourceKey = resource.GetResourceKey(); - if (await PermissionChecker.IsGrantedAsync(context.User, requirement.PermissionName, resourceName, resourceKey)) - { - context.Succeed(requirement); - } - } -} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/EntityResourcePermissionCheckerExtensions.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/KeyedObjectResourcePermissionCheckerExtensions.cs similarity index 56% rename from framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/EntityResourcePermissionCheckerExtensions.cs rename to framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/KeyedObjectResourcePermissionCheckerExtensions.cs index 8c61f3cb39..e8b9e38218 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/EntityResourcePermissionCheckerExtensions.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/KeyedObjectResourcePermissionCheckerExtensions.cs @@ -1,29 +1,28 @@ using System.Threading.Tasks; -using Volo.Abp.Domain.Entities; namespace Volo.Abp.Authorization.Permissions.Resources; -public static class EntityResourcePermissionCheckerExtensions +public static class KeyedObjectResourcePermissionCheckerExtensions { /// - /// Checks if the specified permission is granted for the given entity. + /// Checks if the specified permission is granted for the given resource. /// - /// The type of the entity. + /// The type of the object. /// The resource permission checker instance. /// The name of the permission to check. - /// The entity for which the permission is being checked. + /// The resource for which the permission is being checked. /// A task that represents the asynchronous operation. The task result is a boolean indicating whether the permission is granted. - public static Task IsGrantedAsync(this IResourcePermissionChecker resourcePermissionChecker, string permissionName, TEntity entity) - where TEntity : class, IEntity + public static Task IsGrantedAsync(this IResourcePermissionChecker resourcePermissionChecker, string permissionName, TResource resource) + where TResource : class, IKeyedObject { Check.NotNull(resourcePermissionChecker, nameof(resourcePermissionChecker)); Check.NotNullOrWhiteSpace(permissionName, nameof(permissionName)); - Check.NotNull(entity, nameof(entity)); + Check.NotNull(resource, nameof(resource)); return resourcePermissionChecker.IsGrantedAsync( permissionName, - entity, - entity.GetResourceKey() + resource, + resource.GetObjectKey() ?? throw new AbpException("The resource doesn't have a key.") ); } } diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/KeyedObjectResourcePermissionRequirementHandler.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/KeyedObjectResourcePermissionRequirementHandler.cs new file mode 100644 index 0000000000..df09e0457b --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/KeyedObjectResourcePermissionRequirementHandler.cs @@ -0,0 +1,34 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; + +namespace Volo.Abp.Authorization.Permissions.Resources; + +public class KeyedObjectResourcePermissionRequirementHandler : AuthorizationHandler +{ + protected readonly IResourcePermissionChecker PermissionChecker; + + public KeyedObjectResourcePermissionRequirementHandler( + IResourcePermissionChecker permissionChecker) + { + PermissionChecker = permissionChecker; + } + + protected override async Task HandleRequirementAsync( + AuthorizationHandlerContext context, + ResourcePermissionRequirement requirement, + IKeyedObject? resource) + { + if (resource == null) + { + return; + } + + var resourceName = resource.GetType().FullName!; + var resourceKey = resource.GetObjectKey() ?? throw new AbpException("The resource doesn't have a key."); + + if (await PermissionChecker.IsGrantedAsync(context.User, requirement.PermissionName, resourceName, resourceKey)) + { + context.Succeed(requirement); + } + } +} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/EntityResourcePermissionStoreExtensions.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/KeyedObjectResourcePermissionStoreExtensions.cs similarity index 76% rename from framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/EntityResourcePermissionStoreExtensions.cs rename to framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/KeyedObjectResourcePermissionStoreExtensions.cs index 5e5d3766c3..98da7878e3 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/EntityResourcePermissionStoreExtensions.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/KeyedObjectResourcePermissionStoreExtensions.cs @@ -5,25 +5,25 @@ using Volo.Abp.Domain.Entities; namespace Volo.Abp.Authorization.Permissions.Resources; -public static class EntityResourcePermissionStoreExtensions +public static class KeyedObjectResourcePermissionStoreExtensions { /// /// Retrieves an array of granted permissions for a specific entity. /// - /// The type of the entity. + /// The type of the resource. /// The resource permission store instance. - /// The entity for which the permissions are being checked. + /// The resource for which the permissions are being checked. /// An array of granted permission names as strings. - public static async Task GetGrantedPermissionsAsync( + public static async Task GetGrantedPermissionsAsync( this IResourcePermissionStore resourcePermissionStore, - TEntity entity + TResource resource ) - where TEntity : class, IEntity + where TResource : class, IEntity { Check.NotNull(resourcePermissionStore, nameof(resourcePermissionStore)); - Check.NotNull(entity, nameof(entity)); + Check.NotNull(resource, nameof(resource)); - return (await GetPermissionsAsync(resourcePermissionStore, entity)).Where(x => x.Value).Select(x => x.Key).ToArray(); + return (await GetPermissionsAsync(resourcePermissionStore, resource)).Where(x => x.Value).Select(x => x.Key).ToArray(); } /// @@ -44,7 +44,7 @@ public static class EntityResourcePermissionStoreExtensions return await resourcePermissionStore.GetPermissionsAsync( entity, - entity.GetResourceKey() + entity.GetObjectKey() ?? throw new AbpException("The entity doesn't have a key.") ); } } diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs index 5efa873226..85e0523762 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs @@ -38,6 +38,6 @@ public class AbpDddDomainModule : AbpModule public override void ConfigureServices(ServiceConfigurationContext context) { - context.Services.AddEntityResourcePermissionAuthorization(); + context.Services.AddKeyedObjectResourcePermissionAuthorization(); } }