From 14cab94779e3e869d33fa69b05f0a392b89103b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 16 Aug 2022 09:44:29 +0300 Subject: [PATCH] Add options to enable/disable dynamic permissions. --- .../AbpPermissionManagementDomainModule.cs | 17 +++++++++++++-- .../DynamicPermissionDefinitionStore.cs | 21 ++++++++++++++++++- .../PermissionManagementOptions.cs | 11 ++++++++++ 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/AbpPermissionManagementDomainModule.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/AbpPermissionManagementDomainModule.cs index de5c7a0559..f452035163 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/AbpPermissionManagementDomainModule.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/AbpPermissionManagementDomainModule.cs @@ -2,6 +2,7 @@ using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; using Volo.Abp.Authorization; using Volo.Abp.Caching; using Volo.Abp.DependencyInjection; @@ -19,6 +20,18 @@ namespace Volo.Abp.PermissionManagement; public class AbpPermissionManagementDomainModule : AbpModule { public override async Task OnApplicationInitializationAsync(ApplicationInitializationContext context) + { + if (context + .ServiceProvider + .GetRequiredService>() + .Value + .SaveStaticPermissionsToDatabase) + { + SaveStaticPermissionsToDatabase(context); + } + } + + private static void SaveStaticPermissionsToDatabase(ApplicationInitializationContext context) { Task.Run(async () => { @@ -26,7 +39,7 @@ public class AbpPermissionManagementDomainModule : AbpModule .ServiceProvider .GetRequiredService() .CreateScope(); - + try { await scope @@ -37,7 +50,7 @@ public class AbpPermissionManagementDomainModule : AbpModule catch (Exception ex) { //TODO: We should retry until it's successful! - + scope.ServiceProvider .GetService>() .LogException(ex); diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStore.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStore.cs index 20d95da692..2186ae56cf 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStore.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStore.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Extensions.Caching.Distributed; @@ -17,6 +18,7 @@ public class DynamicPermissionDefinitionStore : IDynamicPermissionDefinitionStor protected IPermissionDefinitionSerializer PermissionDefinitionSerializer { get; } protected IDynamicPermissionDefinitionStoreInMemoryCache StoreCache { get; } protected IDistributedCache DistributedCache { get; } + public PermissionManagementOptions PermissionManagementOptions { get; } protected AbpDistributedCacheOptions CacheOptions { get; } public DynamicPermissionDefinitionStore( @@ -25,30 +27,47 @@ public class DynamicPermissionDefinitionStore : IDynamicPermissionDefinitionStor IPermissionDefinitionSerializer permissionDefinitionSerializer, IDynamicPermissionDefinitionStoreInMemoryCache storeCache, IDistributedCache distributedCache, - IOptions cacheOptions) + IOptions cacheOptions, + IOptions permissionManagementOptions) { PermissionGroupRepository = permissionGroupRepository; PermissionRepository = permissionRepository; PermissionDefinitionSerializer = permissionDefinitionSerializer; StoreCache = storeCache; DistributedCache = distributedCache; + PermissionManagementOptions = permissionManagementOptions.Value; CacheOptions = cacheOptions.Value; } public virtual async Task GetOrNullAsync(string name) { + if (!PermissionManagementOptions.IsDynamicPermissionStoreEnabled) + { + return null; + } + await EnsureCacheIsUptoDateAsync(); return StoreCache.GetPermissionOrNull(name); } public virtual async Task> GetPermissionsAsync() { + if (!PermissionManagementOptions.IsDynamicPermissionStoreEnabled) + { + return Array.Empty(); + } + await EnsureCacheIsUptoDateAsync(); return StoreCache.GetPermissions(); } public virtual async Task> GetGroupsAsync() { + if (!PermissionManagementOptions.IsDynamicPermissionStoreEnabled) + { + return Array.Empty(); + } + await EnsureCacheIsUptoDateAsync(); return StoreCache.GetGroups(); } 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 55137878f3..2109941a27 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 @@ -10,7 +10,18 @@ public class PermissionManagementOptions public Dictionary ProviderPolicies { get; } public HashSet DeletedPermissions { get; } + public HashSet DeletedPermissionGroups { get; } + + /// + /// Default: true. + /// + public bool SaveStaticPermissionsToDatabase { get; set; } = true; + + /// + /// Default: false. + /// + public bool IsDynamicPermissionStoreEnabled { get; set; } public PermissionManagementOptions() {