diff --git a/framework/src/Volo.Abp.Authorization.Abstractions/Volo/Abp/Authorization/Permissions/Resources/IResourcePermissionChecker.cs b/framework/src/Volo.Abp.Authorization.Abstractions/Volo/Abp/Authorization/Permissions/Resources/IResourcePermissionChecker.cs index 0bf3b23389..383e49c527 100644 --- a/framework/src/Volo.Abp.Authorization.Abstractions/Volo/Abp/Authorization/Permissions/Resources/IResourcePermissionChecker.cs +++ b/framework/src/Volo.Abp.Authorization.Abstractions/Volo/Abp/Authorization/Permissions/Resources/IResourcePermissionChecker.cs @@ -20,4 +20,9 @@ public interface IResourcePermissionChecker string resourceName, string resourceKey ); + + Task GetGrantedResourceKeysAsync( + string resourceName, + string permissionName + ); } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Authorization.Abstractions/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionCheckerExtensions.cs b/framework/src/Volo.Abp.Authorization.Abstractions/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionCheckerExtensions.cs index c294b7d75c..bd54ef5eee 100644 --- a/framework/src/Volo.Abp.Authorization.Abstractions/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionCheckerExtensions.cs +++ b/framework/src/Volo.Abp.Authorization.Abstractions/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionCheckerExtensions.cs @@ -55,4 +55,20 @@ public static class ResourcePermissionCheckerExtensions resourceKey.ToString()! ); } + + public static Task GetGrantedResourceKeysAsync( + this IResourcePermissionChecker resourcePermissionChecker, + TResource resource, + string permissionName + ) + { + Check.NotNull(resourcePermissionChecker, nameof(resourcePermissionChecker)); + Check.NotNull(resource, nameof(resource)); + Check.NotNullOrWhiteSpace(permissionName, nameof(permissionName)); + + return resourcePermissionChecker.GetGrantedResourceKeysAsync( + typeof(TResource).FullName!, + permissionName + ); + } } \ No newline at end of file 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/EntityResourcePermissionCheckerExtensions.cs index 810c6eade2..9867bb68cb 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/EntityResourcePermissionCheckerExtensions.cs @@ -1,4 +1,6 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using Volo.Abp.Domain.Entities; @@ -53,4 +55,24 @@ public static class EntityResourcePermissionCheckerExtensions entity.GetKeys().JoinAsString(",") ); } + + public async static Task GetGrantedEntityIdsAsync( + this IResourcePermissionChecker resourcePermissionChecker, + string permissionName + ) + where TEntity : class, IEntity + { + Check.NotNull(resourcePermissionChecker, nameof(resourcePermissionChecker)); + Check.NotNullOrWhiteSpace(permissionName, nameof(permissionName)); + + var keys = await resourcePermissionChecker.GetGrantedResourceKeysAsync( + typeof(TEntity).FullName!, + permissionName + ); + + return keys + .Select(x => Convert.ChangeType(x, typeof(TKey))) + .Cast() + .ToArray(); + } } \ No newline at end of file