Browse Source

Complete DynamicPermissionDefinitionStoreCache.FillAsync

pull/13644/head
Halil İbrahim Kalkan 4 years ago
parent
commit
f285b4a80b
  1. 77
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStoreCache.cs

77
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStoreCache.cs

@ -9,6 +9,7 @@ using Volo.Abp.SimpleStateChecking;
namespace Volo.Abp.PermissionManagement; namespace Volo.Abp.PermissionManagement;
//TODO: Extract interface
public class DynamicPermissionDefinitionStoreCache : ISingletonDependency public class DynamicPermissionDefinitionStoreCache : ISingletonDependency
{ {
public string CacheStamp { get; set; } public string CacheStamp { get; set; }
@ -25,7 +26,7 @@ public class DynamicPermissionDefinitionStoreCache : ISingletonDependency
PermissionDefinitions = new Dictionary<string, PermissionDefinition>(); PermissionDefinitions = new Dictionary<string, PermissionDefinition>();
} }
public async Task FillAsync( public Task FillAsync(
List<PermissionGroupDefinitionRecord> permissionGroupRecords, List<PermissionGroupDefinitionRecord> permissionGroupRecords,
List<PermissionDefinitionRecord> permissionRecords) List<PermissionDefinitionRecord> permissionRecords)
{ {
@ -35,7 +36,7 @@ public class DynamicPermissionDefinitionStoreCache : ISingletonDependency
{ {
var permissionGroup = context.AddGroup( var permissionGroup = context.AddGroup(
permissionGroupRecord.Name, permissionGroupRecord.Name,
new FixedLocalizableString(permissionGroupRecord.DisplayName) new FixedLocalizableString(permissionGroupRecord.DisplayName) //TODO: Consider localization
); );
foreach (var property in permissionGroupRecord.ExtraProperties) foreach (var property in permissionGroupRecord.ExtraProperties)
@ -43,40 +44,54 @@ public class DynamicPermissionDefinitionStoreCache : ISingletonDependency
permissionGroup[property.Key] = property.Value; permissionGroup[property.Key] = property.Value;
} }
var permissionRecordsInThisGroup = permissionRecords.Where(p => p.GroupName == permissionGroup.Name); var permissionRecordsInThisGroup = permissionRecords
.Where(p => p.GroupName == permissionGroup.Name);
foreach (var permissionRecord in permissionRecordsInThisGroup) foreach (var permissionRecord in permissionRecordsInThisGroup)
{ {
var permission = permissionGroup.AddPermission( AddPermissionRecursively(permissionGroup, permissionRecord, permissionRecords);
permissionRecord.Name,
new FixedLocalizableString(permissionRecord.DisplayName),
permissionRecord.MultiTenancySide,
permissionRecord.IsEnabled
);
if (!permissionRecord.Providers.IsNullOrWhiteSpace())
{
permission.Providers.AddRange(permissionRecord.Providers.Split(','));
}
if (!permissionRecord.StateCheckers.IsNullOrWhiteSpace())
{
var checkers = StateCheckerSerializer
.DeserializeArray<PermissionDefinition>(
permissionRecord.StateCheckers
);
permission.StateCheckers.AddRange(checkers);
}
foreach (var property in permissionRecord.ExtraProperties)
{
permission[property.Key] = property.Value;
}
//TODO: Child permissions! (with parent name setting)
} }
} }
return Task.CompletedTask;
} }
private void AddPermissionRecursively(ICanAddChildPermission permissionContainer,
PermissionDefinitionRecord permissionRecord,
List<PermissionDefinitionRecord> allPermissionRecords)
{
var permission = permissionContainer.AddPermission(
permissionRecord.Name,
new FixedLocalizableString(permissionRecord.DisplayName),
permissionRecord.MultiTenancySide,
permissionRecord.IsEnabled
);
if (!permissionRecord.Providers.IsNullOrWhiteSpace())
{
permission.Providers.AddRange(permissionRecord.Providers.Split(','));
}
if (!permissionRecord.StateCheckers.IsNullOrWhiteSpace())
{
var checkers = StateCheckerSerializer
.DeserializeArray<PermissionDefinition>(
permissionRecord.StateCheckers
);
permission.StateCheckers.AddRange(checkers);
}
foreach (var property in permissionRecord.ExtraProperties)
{
permission[property.Key] = property.Value;
}
foreach (var subPermission in allPermissionRecords.Where(p => p.ParentName == permissionRecord.Name))
{
AddPermissionRecursively(permission, subPermission, allPermissionRecords);
}
}
protected virtual Dictionary<string, PermissionDefinition> CreatePermissionDefinitions() protected virtual Dictionary<string, PermissionDefinition> CreatePermissionDefinitions()
{ {
var permissions = new Dictionary<string, PermissionDefinition>(); var permissions = new Dictionary<string, PermissionDefinition>();

Loading…
Cancel
Save