Browse Source

Created initial IStaticPermissionSaver

pull/13644/head
Halil İbrahim Kalkan 4 years ago
parent
commit
f37ad5eec3
  1. 35
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/AbpPermissionManagementDomainModule.cs
  2. 79
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStore.cs
  3. 8
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IStaticPermissionSaver.cs
  4. 47
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/StaticPermissionSaver.cs

35
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/AbpPermissionManagementDomainModule.cs

@ -1,8 +1,10 @@
using System.Collections.Generic;
using System;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Logging;
using Volo.Abp.Authorization;
using Volo.Abp.Caching;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain;
using Volo.Abp.Json;
using Volo.Abp.Modularity;
@ -16,5 +18,30 @@ namespace Volo.Abp.PermissionManagement;
[DependsOn(typeof(AbpJsonModule))]
public class AbpPermissionManagementDomainModule : AbpModule
{
}
public override async Task OnApplicationInitializationAsync(ApplicationInitializationContext context)
{
Task.Run(async () =>
{
using var scope = context
.ServiceProvider
.GetRequiredService<IRootServiceProvider>()
.CreateScope();
try
{
await scope
.ServiceProvider
.GetRequiredService<IStaticPermissionSaver>()
.SaveAsync();
}
catch (Exception ex)
{
//TODO: We should retry until it's successful!
scope.ServiceProvider
.GetService<ILogger<AbpPermissionManagementDomainModule>>()
.LogException(ex);
}
});
}
}

79
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStore.cs

@ -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();
}
}
*/

8
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IStaticPermissionSaver.cs

@ -0,0 +1,8 @@
using System.Threading.Tasks;
namespace Volo.Abp.PermissionManagement;
public interface IStaticPermissionSaver
{
Task SaveAsync();
}

47
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/StaticPermissionSaver.cs

@ -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…
Cancel
Save