Browse Source

Refactor StaticPermissionSaver

pull/13644/head
Halil İbrahim Kalkan 4 years ago
parent
commit
4375f5860f
  1. 59
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/StaticPermissionSaver.cs

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

@ -58,6 +58,11 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc
/* Another instance already did it */ /* Another instance already did it */
return; return;
} }
/* NOTE: This can be further optimized by using 4 cache values for:
* Groups, permissions, deleted groups and deleted permissions.
* But the code would be more complex.
*/
var cacheKey = GetCacheKey(); var cacheKey = GetCacheKey();
var cachedHash = await Cache.GetStringAsync(cacheKey); var cachedHash = await Cache.GetStringAsync(cacheKey);
@ -77,7 +82,7 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc
{ {
return; return;
} }
await UpdateChangedPermissionGroupsAsync(permissionGroupRecords); await UpdateChangedPermissionGroupsAsync(permissionGroupRecords);
await UpdateChangedPermissionsAsync(permissionRecords); await UpdateChangedPermissionsAsync(permissionRecords);
@ -85,7 +90,7 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc
cacheKey, cacheKey,
currentHash, currentHash,
new DistributedCacheEntryOptions { new DistributedCacheEntryOptions {
SlidingExpiration = TimeSpan.FromDays(2) SlidingExpiration = TimeSpan.FromDays(30) //TODO: Make it configurable?
} }
); );
} }
@ -120,13 +125,26 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc
} }
/* Deleted */ /* Deleted */
var deletedRecords = permissionGroupRecordsInDatabase.Values var deletedRecords = PermissionManagementOptions.DeletedPermissionGroups.Any()
.Where(x => PermissionManagementOptions.DeletedPermissionGroups.Contains(x.Name)) ? permissionGroupRecordsInDatabase.Values
.ToArray(); .Where(x => PermissionManagementOptions.DeletedPermissionGroups.Contains(x.Name))
.ToArray()
: Array.Empty<PermissionGroupDefinitionRecord>();
if (newRecords.Any())
{
await PermissionGroupRepository.InsertManyAsync(newRecords);
}
await PermissionGroupRepository.InsertManyAsync(newRecords); if (changedRecords.Any())
await PermissionGroupRepository.UpdateManyAsync(changedRecords); {
await PermissionGroupRepository.DeleteManyAsync(deletedRecords); await PermissionGroupRepository.UpdateManyAsync(changedRecords);
}
if (deletedRecords.Any())
{
await PermissionGroupRepository.DeleteManyAsync(deletedRecords);
}
} }
private async Task UpdateChangedPermissionsAsync(IEnumerable<PermissionDefinitionRecord> permissionRecords) private async Task UpdateChangedPermissionsAsync(IEnumerable<PermissionDefinitionRecord> permissionRecords)
@ -159,13 +177,26 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc
} }
/* Deleted */ /* Deleted */
var deletedRecords = permissionRecordsInDatabase.Values var deletedRecords = PermissionManagementOptions.DeletedPermissions.Any()
.Where(x => PermissionManagementOptions.DeletedPermissions.Contains(x.Name)) ? permissionRecordsInDatabase.Values
.ToArray(); .Where(x => PermissionManagementOptions.DeletedPermissions.Contains(x.Name))
.ToArray()
: Array.Empty<PermissionDefinitionRecord>();
await PermissionRepository.InsertManyAsync(newRecords); if (newRecords.Any())
await PermissionRepository.UpdateManyAsync(changedRecords); {
await PermissionRepository.DeleteManyAsync(deletedRecords); await PermissionRepository.InsertManyAsync(newRecords);
}
if (changedRecords.Any())
{
await PermissionRepository.UpdateManyAsync(changedRecords);
}
if (deletedRecords.Any())
{
await PermissionRepository.DeleteManyAsync(deletedRecords);
}
} }
private string GetDistributedLockKey() private string GetDistributedLockKey()

Loading…
Cancel
Save