Browse Source

Introduce IResourcePermissionChecker

pull/24374/head
Halil İbrahim Kalkan 11 months ago
parent
commit
b535f42963
  1. 23
      framework/src/Volo.Abp.Authorization.Abstractions/Volo/Abp/Authorization/Permissions/Resources/IResourcePermissionChecker.cs
  2. 58
      framework/src/Volo.Abp.Authorization.Abstractions/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionCheckerExtensions.cs
  3. 1
      framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj
  4. 56
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/EntityResourcePermissionCheckerExtensions.cs
  5. 4
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs

23
framework/src/Volo.Abp.Authorization.Abstractions/Volo/Abp/Authorization/Permissions/Resources/IResourcePermissionChecker.cs

@ -0,0 +1,23 @@
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Volo.Abp.Authorization.Permissions.Resources;
public interface IResourcePermissionChecker
{
Task<bool> IsGrantedAsync(
string permissionName,
string resourceName,
string resourceKey
);
Task<IDictionary<string, bool>> GetPermissionsAsync(
string resourceName,
string resourceKey
);
Task<string[]> GetGrantedPermissionsAsync(
string resourceName,
string resourceKey
);
}

58
framework/src/Volo.Abp.Authorization.Abstractions/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionCheckerExtensions.cs

@ -0,0 +1,58 @@
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Volo.Abp.Authorization.Permissions.Resources;
public static class ResourcePermissionCheckerExtensions
{
public static Task<bool> IsGrantedAsync<TResource>(
this IResourcePermissionChecker resourcePermissionChecker,
string permissionName,
TResource resource,
object resourceKey
)
{
Check.NotNull(resourcePermissionChecker, nameof(resourcePermissionChecker));
Check.NotNullOrWhiteSpace(permissionName, nameof(permissionName));
Check.NotNull(resource, nameof(resource));
Check.NotNull(resourceKey, nameof(resourceKey));
return resourcePermissionChecker.IsGrantedAsync(
permissionName,
typeof(TResource).FullName!,
resourceKey.ToString()!
);
}
public static Task<IDictionary<string, bool>> GetPermissionsAsync<TResource>(
this IResourcePermissionChecker resourcePermissionChecker,
TResource resource,
object resourceKey
)
{
Check.NotNull(resourcePermissionChecker, nameof(resourcePermissionChecker));
Check.NotNull(resource, nameof(resource));
Check.NotNull(resourceKey, nameof(resourceKey));
return resourcePermissionChecker.GetPermissionsAsync(
typeof(TResource).FullName!,
resourceKey.ToString()!
);
}
public static Task<string[]> GetGrantedPermissionsAsync<TResource>(
this IResourcePermissionChecker resourcePermissionChecker,
TResource resource,
object resourceKey
)
{
Check.NotNull(resourcePermissionChecker, nameof(resourcePermissionChecker));
Check.NotNull(resource, nameof(resource));
Check.NotNull(resourceKey, nameof(resourceKey));
return resourcePermissionChecker.GetGrantedPermissionsAsync(
typeof(TResource).FullName!,
resourceKey.ToString()!
);
}
}

1
framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj

@ -17,6 +17,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Volo.Abp.Authorization.Abstractions\Volo.Abp.Authorization.Abstractions.csproj" />
<ProjectReference Include="..\Volo.Abp.Ddd.Domain.Shared\Volo.Abp.Ddd.Domain.Shared.csproj" /> <ProjectReference Include="..\Volo.Abp.Ddd.Domain.Shared\Volo.Abp.Ddd.Domain.Shared.csproj" />
<ProjectReference Include="..\Volo.Abp.Auditing\Volo.Abp.Auditing.csproj" /> <ProjectReference Include="..\Volo.Abp.Auditing\Volo.Abp.Auditing.csproj" />
<ProjectReference Include="..\Volo.Abp.Caching\Volo.Abp.Caching.csproj" /> <ProjectReference Include="..\Volo.Abp.Caching\Volo.Abp.Caching.csproj" />

56
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Authorization/Permissions/Resources/EntityResourcePermissionCheckerExtensions.cs

@ -0,0 +1,56 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Domain.Entities;
namespace Volo.Abp.Authorization.Permissions.Resources;
public static class EntityResourcePermissionCheckerExtensions
{
public static Task<bool> IsGrantedAsync<TEntity>(
this IResourcePermissionChecker resourcePermissionChecker,
string permissionName,
TEntity entity
)
where TEntity : class, IEntity
{
Check.NotNull(resourcePermissionChecker, nameof(resourcePermissionChecker));
Check.NotNullOrWhiteSpace(permissionName, nameof(permissionName));
Check.NotNull(entity, nameof(entity));
return resourcePermissionChecker.IsGrantedAsync(
permissionName,
typeof(TEntity).FullName!,
entity.GetKeys().JoinAsString(",")
);
}
public static Task<IDictionary<string, bool>> GetPermissionsAsync<TEntity>(
this IResourcePermissionChecker resourcePermissionChecker,
TEntity entity
)
where TEntity : class, IEntity
{
Check.NotNull(resourcePermissionChecker, nameof(resourcePermissionChecker));
Check.NotNull(entity, nameof(entity));
return resourcePermissionChecker.GetPermissionsAsync(
typeof(TEntity).FullName!,
entity.GetKeys().JoinAsString(",")
);
}
public static Task<string[]> GetGrantedPermissionsAsync<TEntity>(
this IResourcePermissionChecker resourcePermissionChecker,
TEntity entity
)
where TEntity : class, IEntity
{
Check.NotNull(resourcePermissionChecker, nameof(resourcePermissionChecker));
Check.NotNull(entity, nameof(entity));
return resourcePermissionChecker.GetGrantedPermissionsAsync(
typeof(TEntity).FullName!,
entity.GetKeys().JoinAsString(",")
);
}
}

4
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs

@ -1,5 +1,6 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Auditing; using Volo.Abp.Auditing;
using Volo.Abp.Authorization;
using Volo.Abp.Caching; using Volo.Abp.Caching;
using Volo.Abp.Data; using Volo.Abp.Data;
using Volo.Abp.Domain.ChangeTracking; using Volo.Abp.Domain.ChangeTracking;
@ -24,7 +25,8 @@ namespace Volo.Abp.Domain;
typeof(AbpExceptionHandlingModule), typeof(AbpExceptionHandlingModule),
typeof(AbpSpecificationsModule), typeof(AbpSpecificationsModule),
typeof(AbpCachingModule), typeof(AbpCachingModule),
typeof(AbpDddDomainSharedModule) typeof(AbpDddDomainSharedModule),
typeof(AbpAuthorizationAbstractionsModule)
)] )]
public class AbpDddDomainModule : AbpModule public class AbpDddDomainModule : AbpModule
{ {

Loading…
Cancel
Save