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