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 Volo.Abp.Authorization.Permissions;
using Volo.Abp.Authorization.Permissions.Resources;
using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.Identity;
@ -12,13 +13,19 @@ public class RoleUpdateEventHandler :
{
protected IPermissionManager PermissionManager { get; }
protected IPermissionGrantRepository PermissionGrantRepository { get; }
protected IResourcePermissionManager ResourcePermissionManager { get; }
protected IResourcePermissionGrantRepository ResourcePermissionGrantRepository { get; }
public RoleUpdateEventHandler(
IPermissionManager permissionManager,
IPermissionGrantRepository permissionGrantRepository)
IPermissionGrantRepository permissionGrantRepository,
IResourcePermissionManager resourcePermissionManager,
IResourcePermissionGrantRepository resourcePermissionGrantRepository)
{
PermissionManager = permissionManager;
PermissionGrantRepository = permissionGrantRepository;
ResourcePermissionManager = resourcePermissionManager;
ResourcePermissionGrantRepository = resourcePermissionGrantRepository;
}
public async Task HandleEventAsync(IdentityRoleNameChangedEto eventData)
@ -28,5 +35,11 @@ public class RoleUpdateEventHandler :
{
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)]
public virtual async Task DeleteResourceAsync(string resourceName, string resourceKey, string providerName, string providerKey)
{
var resourcePermissions = await ResourcePermissionManager.GetAvailablePermissionsAsync(resourceName);
foreach (var resourcePermission in resourcePermissions)
{
await ResourcePermissionManager.SetAsync(resourcePermission.Name, resourceName, resourceKey, providerName, providerKey, false);
}
await ResourcePermissionManager.DeleteAsync(resourceName, resourceKey, providerName, providerKey);
}
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
);
Task<List<ResourcePermissionGrant>> GetListAsync(
string providerName,
string providerKey,
CancellationToken cancellationToken = default
);
Task<List<ResourcePermissionGrant>> GetPermissionsAsync(
string resourceName,
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,
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);
}
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)
{
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));
}
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)
{
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);
}
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)
{
cancellationToken = GetCancellationToken(cancellationToken);

Loading…
Cancel
Save