Browse Source

Add resource permission management to RoleUpdateEventHandler

pull/24374/head
maliming 11 months ago
parent
commit
c8c46c8521
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 15
      modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs
  2. 6
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs
  3. 6
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionGrantRepository.cs
  4. 12
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionManager.cs
  5. 20
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/ResourcePermissionManager.cs
  6. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo/Abp/PermissionManagement/EntityFrameworkCore/EfCoreResourcePermissionGrantRepository.cs
  7. 10
      modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/Volo/Abp/PermissionManagement/MongoDb/MongoResourcePermissionGrantRepository.cs

15
modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs

@ -1,5 +1,6 @@
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Authorization.Permissions; using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Authorization.Permissions.Resources;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus.Distributed; using Volo.Abp.EventBus.Distributed;
using Volo.Abp.Identity; using Volo.Abp.Identity;
@ -12,13 +13,19 @@ public class RoleUpdateEventHandler :
{ {
protected IPermissionManager PermissionManager { get; } protected IPermissionManager PermissionManager { get; }
protected IPermissionGrantRepository PermissionGrantRepository { get; } protected IPermissionGrantRepository PermissionGrantRepository { get; }
protected IResourcePermissionManager ResourcePermissionManager { get; }
protected IResourcePermissionGrantRepository ResourcePermissionGrantRepository { get; }
public RoleUpdateEventHandler( public RoleUpdateEventHandler(
IPermissionManager permissionManager, IPermissionManager permissionManager,
IPermissionGrantRepository permissionGrantRepository) IPermissionGrantRepository permissionGrantRepository,
IResourcePermissionManager resourcePermissionManager,
IResourcePermissionGrantRepository resourcePermissionGrantRepository)
{ {
PermissionManager = permissionManager; PermissionManager = permissionManager;
PermissionGrantRepository = permissionGrantRepository; PermissionGrantRepository = permissionGrantRepository;
ResourcePermissionManager = resourcePermissionManager;
ResourcePermissionGrantRepository = resourcePermissionGrantRepository;
} }
public async Task HandleEventAsync(IdentityRoleNameChangedEto eventData) public async Task HandleEventAsync(IdentityRoleNameChangedEto eventData)
@ -28,5 +35,11 @@ public class RoleUpdateEventHandler :
{ {
await PermissionManager.UpdateProviderKeyAsync(permissionGrant, eventData.Name); await PermissionManager.UpdateProviderKeyAsync(permissionGrant, eventData.Name);
} }
var resourcePermissionGrantsInRole = await ResourcePermissionGrantRepository.GetListAsync(RoleResourcePermissionValueProvider.ProviderName, eventData.OldName);
foreach (var resourcePermissionGrant in resourcePermissionGrantsInRole)
{
await ResourcePermissionManager.UpdateProviderKeyAsync(resourcePermissionGrant, eventData.Name);
}
} }
} }

6
modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs

@ -287,11 +287,7 @@ public class PermissionAppService : ApplicationService, IPermissionAppService
[Authorize(PermissionManagementPermissions.ManageResourcePermissions)] [Authorize(PermissionManagementPermissions.ManageResourcePermissions)]
public virtual async Task DeleteResourceAsync(string resourceName, string resourceKey, string providerName, string providerKey) public virtual async Task DeleteResourceAsync(string resourceName, string resourceKey, string providerName, string providerKey)
{ {
var resourcePermissions = await ResourcePermissionManager.GetAvailablePermissionsAsync(resourceName); await ResourcePermissionManager.DeleteAsync(resourceName, resourceKey, providerName, providerKey);
foreach (var resourcePermission in resourcePermissions)
{
await ResourcePermissionManager.SetAsync(resourcePermission.Name, resourceName, resourceKey, providerName, providerKey, false);
}
} }
protected virtual async Task CheckProviderPolicy(string providerName) protected virtual async Task CheckProviderPolicy(string providerName)

6
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionGrantRepository.cs

@ -34,6 +34,12 @@ public interface IResourcePermissionGrantRepository : IBasicRepository<ResourceP
CancellationToken cancellationToken = default CancellationToken cancellationToken = default
); );
Task<List<ResourcePermissionGrant>> GetListAsync(
string providerName,
string providerKey,
CancellationToken cancellationToken = default
);
Task<List<ResourcePermissionGrant>> GetPermissionsAsync( Task<List<ResourcePermissionGrant>> GetPermissionsAsync(
string resourceName, string resourceName,
string resourceKey, string resourceKey,

12
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionManager.cs

@ -53,4 +53,16 @@ public interface IResourcePermissionManager
string providerKey, string providerKey,
bool isGranted bool isGranted
); );
Task<ResourcePermissionGrant> UpdateProviderKeyAsync(
ResourcePermissionGrant resourcePermissionGrant,
string providerKey
);
Task DeleteAsync(
string resourceName,
string resourceKey,
string providerName,
string providerKey
);
} }

20
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/ResourcePermissionManager.cs

@ -283,6 +283,26 @@ public class ResourcePermissionManager : IResourcePermissionManager, ISingletonD
await provider.SetAsync(permissionName, resourceName, resourceKey, providerKey, isGranted); await provider.SetAsync(permissionName, resourceName, resourceKey, providerKey, isGranted);
} }
public virtual async Task<ResourcePermissionGrant> UpdateProviderKeyAsync(ResourcePermissionGrant resourcePermissionGrant, string providerKey)
{
using (CurrentTenant.Change(resourcePermissionGrant.TenantId))
{
//Invalidating the cache for the old key
await Cache.RemoveAsync(
ResourcePermissionGrantCacheItem.CalculateCacheKey(
resourcePermissionGrant.Name,
resourcePermissionGrant.ResourceName,
resourcePermissionGrant.ResourceKey,
resourcePermissionGrant.ProviderName,
resourcePermissionGrant.ProviderKey
)
);
}
resourcePermissionGrant.ProviderKey = providerKey;
return await ResourcePermissionGrantRepository.UpdateAsync(resourcePermissionGrant, true);
}
public virtual async Task<ResourcePermissionGrant> UpdateProviderKeyAsync(ResourcePermissionGrant resourcePermissionGrant, string resourceName, string resourceKey, string providerKey) public virtual async Task<ResourcePermissionGrant> UpdateProviderKeyAsync(ResourcePermissionGrant resourcePermissionGrant, string resourceName, string resourceKey, string providerKey)
{ {
using (CurrentTenant.Change(resourcePermissionGrant.TenantId)) using (CurrentTenant.Change(resourcePermissionGrant.TenantId))

9
modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo/Abp/PermissionManagement/EntityFrameworkCore/EfCoreResourcePermissionGrantRepository.cs

@ -54,6 +54,15 @@ public class EfCoreResourcePermissionGrantRepository : EfCoreRepository<IPermiss
).ToListAsync(GetCancellationToken(cancellationToken)); ).ToListAsync(GetCancellationToken(cancellationToken));
} }
public virtual async Task<List<ResourcePermissionGrant>> GetListAsync(string providerName, string providerKey, CancellationToken cancellationToken = default)
{
return await (await GetDbSetAsync())
.Where(s =>
s.ProviderName == providerName &&
s.ProviderKey == providerKey
).ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<List<ResourcePermissionGrant>> GetPermissionsAsync(string resourceName, string resourceKey, CancellationToken cancellationToken = default) public virtual async Task<List<ResourcePermissionGrant>> GetPermissionsAsync(string resourceName, string resourceKey, CancellationToken cancellationToken = default)
{ {
return await (await GetDbSetAsync()) return await (await GetDbSetAsync())

10
modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/Volo/Abp/PermissionManagement/MongoDb/MongoResourcePermissionGrantRepository.cs

@ -57,6 +57,16 @@ public class MongoResourcePermissionGrantRepository : MongoDbRepository<IPermiss
).ToListAsync(cancellationToken); ).ToListAsync(cancellationToken);
} }
public virtual async Task<List<ResourcePermissionGrant>> GetListAsync(string providerName, string providerKey, CancellationToken cancellationToken = default)
{
cancellationToken = GetCancellationToken(cancellationToken);
return await (await GetQueryableAsync(cancellationToken))
.Where(s =>
s.ProviderName == providerName &&
s.ProviderKey == providerKey
).ToListAsync(cancellationToken);
}
public virtual async Task<List<ResourcePermissionGrant>> GetPermissionsAsync(string resourceName, string resourceKey, CancellationToken cancellationToken = default) public virtual async Task<List<ResourcePermissionGrant>> GetPermissionsAsync(string resourceName, string resourceKey, CancellationToken cancellationToken = default)
{ {
cancellationToken = GetCancellationToken(cancellationToken); cancellationToken = GetCancellationToken(cancellationToken);

Loading…
Cancel
Save