mirror of https://github.com/abpframework/abp.git
4 changed files with 165 additions and 4 deletions
@ -0,0 +1,79 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.Authorization.Permissions; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
|
|
||||
|
namespace Volo.Abp.PermissionManagement; |
||||
|
|
||||
|
/* |
||||
|
|
||||
|
[Dependency(ReplaceServices = true)] |
||||
|
public class DynamicPermissionDefinitionStore : IDynamicPermissionDefinitionStore, ITransientDependency |
||||
|
{ |
||||
|
protected IPermissionGroupDefinitionRecordRepository PermissionGroupRepository { get; } |
||||
|
protected IPermissionDefinitionRecordRepository PermissionRepository { get; } |
||||
|
protected IPermissionDefinitionSerializer PermissionDefinitionSerializer { get; } |
||||
|
|
||||
|
public DynamicPermissionDefinitionStore( |
||||
|
IPermissionGroupDefinitionRecordRepository permissionGroupRepository, |
||||
|
IPermissionDefinitionRecordRepository permissionRepository, |
||||
|
IPermissionDefinitionSerializer permissionDefinitionSerializer) |
||||
|
{ |
||||
|
PermissionGroupRepository = permissionGroupRepository; |
||||
|
PermissionRepository = permissionRepository; |
||||
|
PermissionDefinitionSerializer = permissionDefinitionSerializer; |
||||
|
} |
||||
|
|
||||
|
public virtual async Task<PermissionDefinition> GetOrNullAsync(string name) |
||||
|
{ |
||||
|
var permissionRecord = await PermissionRepository.FindByNameAsync(name); |
||||
|
if (permissionRecord == null) |
||||
|
{ |
||||
|
return null; |
||||
|
} |
||||
|
|
||||
|
return await PermissionDefinitionSerializer.DeserializeAsync(permissionRecord); |
||||
|
} |
||||
|
|
||||
|
public virtual async Task<IReadOnlyList<PermissionDefinition>> GetPermissionsAsync() |
||||
|
{ |
||||
|
var permissionRecords = await PermissionRepository.GetListAsync(); |
||||
|
if(permissionRecords.Count == 0) |
||||
|
{ |
||||
|
return Array.Empty<PermissionDefinition>(); |
||||
|
} |
||||
|
|
||||
|
var permissionDefinitions = new PermissionDefinition[permissionRecords.Count]; |
||||
|
for (var i = 0; i < permissionRecords.Count; i++) |
||||
|
{ |
||||
|
permissionDefinitions[i] = await PermissionDefinitionSerializer.DeserializeAsync(permissionRecords[i]); |
||||
|
} |
||||
|
|
||||
|
return permissionDefinitions; |
||||
|
} |
||||
|
|
||||
|
public virtual async Task<IReadOnlyList<PermissionGroupDefinition>> GetGroupsAsync() |
||||
|
{ |
||||
|
var permissionGroupRecords = await PermissionGroupRepository.GetListAsync(); |
||||
|
if(permissionGroupRecords.Count == 0) |
||||
|
{ |
||||
|
return Array.Empty<PermissionGroupDefinition>(); |
||||
|
} |
||||
|
|
||||
|
var permissionGroupDefinitions = new PermissionGroupDefinition[permissionGroupRecords.Count]; |
||||
|
for (var i = 0; i < permissionGroupRecords.Count; i++) |
||||
|
{ |
||||
|
permissionGroupDefinitions[i] = await PermissionDefinitionSerializer.DeserializeAsync(permissionGroupRecords[i]); |
||||
|
} |
||||
|
|
||||
|
return permissionGroupDefinitions; |
||||
|
} |
||||
|
|
||||
|
public virtual async Task StoreStaticPermissionsAsync() |
||||
|
{ |
||||
|
throw new NotImplementedException(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
*/ |
||||
@ -0,0 +1,8 @@ |
|||||
|
using System.Threading.Tasks; |
||||
|
|
||||
|
namespace Volo.Abp.PermissionManagement; |
||||
|
|
||||
|
public interface IStaticPermissionSaver |
||||
|
{ |
||||
|
Task SaveAsync(); |
||||
|
} |
||||
@ -0,0 +1,47 @@ |
|||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.Authorization.Permissions; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
|
using Volo.Abp.Uow; |
||||
|
|
||||
|
namespace Volo.Abp.PermissionManagement; |
||||
|
|
||||
|
public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependency |
||||
|
{ |
||||
|
protected IStaticPermissionDefinitionStore StaticStore { get; } |
||||
|
protected IPermissionGroupDefinitionRecordRepository PermissionGroupRepository { get; } |
||||
|
protected IPermissionDefinitionRecordRepository PermissionRepository { get; } |
||||
|
protected IPermissionDefinitionSerializer PermissionSerializer { get; } |
||||
|
|
||||
|
public StaticPermissionSaver( |
||||
|
IStaticPermissionDefinitionStore staticStore, |
||||
|
IPermissionGroupDefinitionRecordRepository permissionGroupRepository, |
||||
|
IPermissionDefinitionRecordRepository permissionRepository, |
||||
|
IPermissionDefinitionSerializer permissionSerializer) |
||||
|
{ |
||||
|
StaticStore = staticStore; |
||||
|
PermissionGroupRepository = permissionGroupRepository; |
||||
|
PermissionRepository = permissionRepository; |
||||
|
PermissionSerializer = permissionSerializer; |
||||
|
} |
||||
|
|
||||
|
[UnitOfWork] |
||||
|
public virtual async Task SaveAsync() |
||||
|
{ |
||||
|
// TODO: Save only changed permissions & groups
|
||||
|
/* - get all groups |
||||
|
* - compare and update or insert groups |
||||
|
* - get all permissions |
||||
|
* - compare and update or insert permissions |
||||
|
* - set in-memory cache using the latest group and permission data |
||||
|
*/ |
||||
|
|
||||
|
var permissionGroups = await StaticStore.GetGroupsAsync(); |
||||
|
foreach (var permissionGroup in permissionGroups) |
||||
|
{ |
||||
|
foreach (var permission in permissionGroup.GetPermissionsWithChildren()) |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue