Browse Source

Implement UpdateChangedPermissionGroupsAsync.

pull/13644/head
Halil İbrahim Kalkan 4 years ago
parent
commit
6bfc492344
  1. 103
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionDefinitionRecord.cs
  2. 14
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionGroupDefinitionRecord.cs
  3. 44
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/StaticPermissionSaver.cs

103
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionDefinitionRecord.cs

@ -61,4 +61,107 @@ public class PermissionDefinitionRecord : BasicAggregateRoot<Guid>, IHasExtraPro
ExtraProperties = new ExtraPropertyDictionary();
this.SetDefaultsForExtraProperties();
}
public bool HasSameData(PermissionDefinitionRecord otherRecord)
{
if (Name != otherRecord.Name)
{
return false;
}
if (GroupName != otherRecord.GroupName)
{
return false;
}
if (ParentName != otherRecord.ParentName)
{
return false;
}
if (DisplayName != otherRecord.DisplayName)
{
return false;
}
if (IsEnabled != otherRecord.IsEnabled)
{
return false;
}
if (MultiTenancySide != otherRecord.MultiTenancySide)
{
return false;
}
if (Providers != otherRecord.Providers)
{
return false;
}
if (StateCheckers != otherRecord.StateCheckers)
{
return false;
}
if (!this.HasSameExtraProperties(otherRecord))
{
return false;
}
return true;
}
public void Patch(PermissionDefinitionRecord otherRecord)
{
if (Name != otherRecord.Name)
{
Name = otherRecord.Name;
}
if (GroupName != otherRecord.GroupName)
{
GroupName = otherRecord.GroupName;
}
if (ParentName != otherRecord.ParentName)
{
ParentName = otherRecord.ParentName;
}
if (DisplayName != otherRecord.DisplayName)
{
DisplayName = otherRecord.DisplayName;
}
if (IsEnabled != otherRecord.IsEnabled)
{
IsEnabled = otherRecord.IsEnabled;
}
if (MultiTenancySide != otherRecord.MultiTenancySide)
{
MultiTenancySide = otherRecord.MultiTenancySide;
}
if (Providers != otherRecord.Providers)
{
Providers = otherRecord.Providers;
}
if (StateCheckers != otherRecord.StateCheckers)
{
StateCheckers = otherRecord.StateCheckers;
}
if (!this.HasSameExtraProperties(otherRecord))
{
this.ExtraProperties.Clear();
foreach (var property in otherRecord.ExtraProperties)
{
this.ExtraProperties.Add(property.Key, property.Value);
}
}
}
}

14
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionGroupDefinitionRecord.cs

@ -51,23 +51,23 @@ public class PermissionGroupDefinitionRecord : BasicAggregateRoot<Guid>, IHasExt
return true;
}
public void Patch(PermissionGroupDefinitionRecord record)
public void Patch(PermissionGroupDefinitionRecord otherRecord)
{
if (Name != record.Name)
if (Name != otherRecord.Name)
{
Name = record.Name;
Name = otherRecord.Name;
}
if (DisplayName != record.DisplayName)
if (DisplayName != otherRecord.DisplayName)
{
DisplayName = record.DisplayName;
DisplayName = otherRecord.DisplayName;
}
if (!this.HasSameExtraProperties(record))
if (!this.HasSameExtraProperties(otherRecord))
{
this.ExtraProperties.Clear();
foreach (var property in record.ExtraProperties)
foreach (var property in otherRecord.ExtraProperties)
{
this.ExtraProperties.Add(property.Key, property.Value);
}

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

@ -78,7 +78,8 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc
return;
}
await UpdateChangedGroupsAsync(permissionGroupRecords);
await UpdateChangedPermissionGroupsAsync(permissionGroupRecords);
await UpdateChangedPermissionsAsync(permissionRecords);
await Cache.SetStringAsync(
cacheKey,
@ -89,7 +90,7 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc
);
}
private async Task UpdateChangedGroupsAsync(PermissionGroupDefinitionRecord[] permissionGroupRecords)
private async Task UpdateChangedPermissionGroupsAsync(IEnumerable<PermissionGroupDefinitionRecord> permissionGroupRecords)
{
var newRecords = new List<PermissionGroupDefinitionRecord>();
var changedRecords = new List<PermissionGroupDefinitionRecord>();
@ -127,6 +128,45 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc
await PermissionGroupRepository.UpdateManyAsync(changedRecords);
await PermissionGroupRepository.DeleteManyAsync(deletedRecords);
}
private async Task UpdateChangedPermissionsAsync(IEnumerable<PermissionDefinitionRecord> permissionRecords)
{
var newRecords = new List<PermissionDefinitionRecord>();
var changedRecords = new List<PermissionDefinitionRecord>();
var permissionRecordsInDatabase = (await PermissionRepository.GetListAsync())
.ToDictionary(x => x.Name);
foreach (var permissionRecord in permissionRecords)
{
var permissionRecordInDatabase = permissionRecordsInDatabase.GetOrDefault(permissionRecord.Name);
if (permissionRecordInDatabase == null)
{
/* New group */
newRecords.Add(permissionRecord);
continue;
}
if (permissionRecord.HasSameData(permissionRecordInDatabase))
{
/* Not changed */
continue;
}
/* Changed */
permissionRecordInDatabase.Patch(permissionRecord);
changedRecords.Add(permissionRecordInDatabase);
}
/* Deleted */
var deletedRecords = permissionRecordsInDatabase.Values
.Where(x => PermissionManagementOptions.DeletedPermissions.Contains(x.Name))
.ToArray();
await PermissionRepository.InsertManyAsync(newRecords);
await PermissionRepository.UpdateManyAsync(changedRecords);
await PermissionRepository.DeleteManyAsync(deletedRecords);
}
private string GetDistributedLockKey()
{

Loading…
Cancel
Save