From 05ba7b40ace12949b18cdcaa74179a7b92ecb2a7 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 31 Aug 2022 10:21:09 +0800 Subject: [PATCH] Move `DeletedPermissions` and `DeletedPermissionGroups` to `AbpPermissionOptions`. --- .../Permissions/AbpPermissionOptions.cs | 10 +++- .../PermissionManagementOptions.cs | 9 +-- .../StaticPermissionSaver.cs | 60 +++++++++---------- 3 files changed, 40 insertions(+), 39 deletions(-) diff --git a/framework/src/Volo.Abp.Authorization.Abstractions/Volo/Abp/Authorization/Permissions/AbpPermissionOptions.cs b/framework/src/Volo.Abp.Authorization.Abstractions/Volo/Abp/Authorization/Permissions/AbpPermissionOptions.cs index 17ff28798e..4bdd7c0bb8 100644 --- a/framework/src/Volo.Abp.Authorization.Abstractions/Volo/Abp/Authorization/Permissions/AbpPermissionOptions.cs +++ b/framework/src/Volo.Abp.Authorization.Abstractions/Volo/Abp/Authorization/Permissions/AbpPermissionOptions.cs @@ -1,4 +1,5 @@ -using Volo.Abp.Collections; +using System.Collections.Generic; +using Volo.Abp.Collections; namespace Volo.Abp.Authorization.Permissions; @@ -8,9 +9,16 @@ public class AbpPermissionOptions public ITypeList ValueProviders { get; } + public HashSet DeletedPermissions { get; } + + public HashSet DeletedPermissionGroups { get; } + public AbpPermissionOptions() { DefinitionProviders = new TypeList(); ValueProviders = new TypeList(); + + DeletedPermissions = new HashSet(); + DeletedPermissionGroups = new HashSet(); } } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManagementOptions.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManagementOptions.cs index 2109941a27..489ae26e3d 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManagementOptions.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManagementOptions.cs @@ -8,11 +8,7 @@ public class PermissionManagementOptions public ITypeList ManagementProviders { get; } public Dictionary ProviderPolicies { get; } - - public HashSet DeletedPermissions { get; } - - public HashSet DeletedPermissionGroups { get; } - + /// /// Default: true. /// @@ -27,8 +23,5 @@ public class PermissionManagementOptions { ManagementProviders = new TypeList(); ProviderPolicies = new Dictionary(); - - DeletedPermissions = new HashSet(); - DeletedPermissionGroups = new HashSet(); } } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/StaticPermissionSaver.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/StaticPermissionSaver.cs index 5754031509..ba0be474f8 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/StaticPermissionSaver.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/StaticPermissionSaver.cs @@ -24,20 +24,20 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc protected IDistributedCache Cache { get; } protected IApplicationNameAccessor ApplicationNameAccessor { get; } protected IAbpDistributedLock DistributedLock { get; } - protected PermissionManagementOptions PermissionManagementOptions { get; } + protected AbpPermissionOptions PermissionOptions { get; } protected ICancellationTokenProvider CancellationTokenProvider { get; } protected AbpDistributedCacheOptions CacheOptions { get; } - + public StaticPermissionSaver( IStaticPermissionDefinitionStore staticStore, IPermissionGroupDefinitionRecordRepository permissionGroupRepository, IPermissionDefinitionRecordRepository permissionRepository, IPermissionDefinitionSerializer permissionSerializer, - IDistributedCache cache, + IDistributedCache cache, IOptions cacheOptions, IApplicationNameAccessor applicationNameAccessor, IAbpDistributedLock distributedLock, - IOptions permissionManagementOptions, + IOptions permissionOptions, ICancellationTokenProvider cancellationTokenProvider) { StaticStore = staticStore; @@ -48,23 +48,23 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc ApplicationNameAccessor = applicationNameAccessor; DistributedLock = distributedLock; CancellationTokenProvider = cancellationTokenProvider; - PermissionManagementOptions = permissionManagementOptions.Value; + PermissionOptions = permissionOptions.Value; CacheOptions = cacheOptions.Value; } - + [UnitOfWork] public virtual async Task SaveAsync() { await using var applicationLockHandle = await DistributedLock.TryAcquireAsync( GetApplicationDistributedLockKey() ); - + if (applicationLockHandle == null) { /* Another application instance is already doing it */ 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. This is enough for now. @@ -80,10 +80,10 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc var currentHash = CalculateHash( permissionGroupRecords, permissionRecords, - PermissionManagementOptions.DeletedPermissionGroups, - PermissionManagementOptions.DeletedPermissions + PermissionOptions.DeletedPermissionGroups, + PermissionOptions.DeletedPermissions ); - + if (cachedHash == currentHash) { return; @@ -154,11 +154,11 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc permissionGroupRecordInDatabase.Patch(permissionGroupRecord); changedRecords.Add(permissionGroupRecordInDatabase); } - + /* Deleted */ - var deletedRecords = PermissionManagementOptions.DeletedPermissionGroups.Any() + var deletedRecords = PermissionOptions.DeletedPermissionGroups.Any() ? permissionGroupRecordsInDatabase.Values - .Where(x => PermissionManagementOptions.DeletedPermissionGroups.Contains(x.Name)) + .Where(x => PermissionOptions.DeletedPermissionGroups.Contains(x.Name)) .ToArray() : Array.Empty(); @@ -176,10 +176,10 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc { await PermissionGroupRepository.DeleteManyAsync(deletedRecords); } - + return newRecords.Any() || changedRecords.Any() || deletedRecords.Any(); } - + private async Task UpdateChangedPermissionsAsync( IEnumerable permissionRecords) { @@ -209,23 +209,23 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc permissionRecordInDatabase.Patch(permissionRecord); changedRecords.Add(permissionRecordInDatabase); } - + /* Deleted */ var deletedRecords = new List(); - - if (PermissionManagementOptions.DeletedPermissions.Any()) + + if (PermissionOptions.DeletedPermissions.Any()) { deletedRecords.AddRange( permissionRecordsInDatabase.Values - .Where(x => PermissionManagementOptions.DeletedPermissions.Contains(x.Name)) + .Where(x => PermissionOptions.DeletedPermissions.Contains(x.Name)) ); } - if (PermissionManagementOptions.DeletedPermissionGroups.Any()) + if (PermissionOptions.DeletedPermissionGroups.Any()) { deletedRecords.AddIfNotContains( permissionRecordsInDatabase.Values - .Where(x => PermissionManagementOptions.DeletedPermissionGroups.Contains(x.GroupName)) + .Where(x => PermissionOptions.DeletedPermissionGroups.Contains(x.GroupName)) ); } @@ -243,7 +243,7 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc { await PermissionRepository.DeleteManyAsync(deletedRecords); } - + return newRecords.Any() || changedRecords.Any() || deletedRecords.Any(); } @@ -261,7 +261,7 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc { return $"{CacheOptions.KeyPrefix}_{ApplicationNameAccessor.ApplicationName}_AbpPermissionsHash"; } - + private string GetCommonStampCacheKey() { return $"{CacheOptions.KeyPrefix}_AbpInMemoryPermissionCacheStamp"; @@ -274,21 +274,21 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc IEnumerable deletedPermissions) { var stringBuilder = new StringBuilder(); - + stringBuilder.Append("PermissionGroupRecords:"); stringBuilder.AppendLine(JsonSerializer.Serialize(permissionGroupRecords)); - + stringBuilder.Append("PermissionRecords:"); stringBuilder.AppendLine(JsonSerializer.Serialize(permissionRecords)); - + stringBuilder.Append("DeletedPermissionGroups:"); stringBuilder.AppendLine(deletedPermissionGroups.JoinAsString(",")); - + stringBuilder.Append("DeletedPermission:"); stringBuilder.Append(deletedPermissions.JoinAsString(",")); - + return stringBuilder .ToString() .ToMd5(); } -} \ No newline at end of file +}