Browse Source

Add options to enable/disable dynamic permissions.

pull/13644/head
Halil İbrahim Kalkan 4 years ago
parent
commit
14cab94779
  1. 17
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/AbpPermissionManagementDomainModule.cs
  2. 21
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStore.cs
  3. 11
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManagementOptions.cs

17
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/AbpPermissionManagementDomainModule.cs

@ -2,6 +2,7 @@
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Volo.Abp.Authorization; using Volo.Abp.Authorization;
using Volo.Abp.Caching; using Volo.Abp.Caching;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
@ -19,6 +20,18 @@ namespace Volo.Abp.PermissionManagement;
public class AbpPermissionManagementDomainModule : AbpModule public class AbpPermissionManagementDomainModule : AbpModule
{ {
public override async Task OnApplicationInitializationAsync(ApplicationInitializationContext context) public override async Task OnApplicationInitializationAsync(ApplicationInitializationContext context)
{
if (context
.ServiceProvider
.GetRequiredService<IOptions<PermissionManagementOptions>>()
.Value
.SaveStaticPermissionsToDatabase)
{
SaveStaticPermissionsToDatabase(context);
}
}
private static void SaveStaticPermissionsToDatabase(ApplicationInitializationContext context)
{ {
Task.Run(async () => Task.Run(async () =>
{ {
@ -26,7 +39,7 @@ public class AbpPermissionManagementDomainModule : AbpModule
.ServiceProvider .ServiceProvider
.GetRequiredService<IRootServiceProvider>() .GetRequiredService<IRootServiceProvider>()
.CreateScope(); .CreateScope();
try try
{ {
await scope await scope
@ -37,7 +50,7 @@ public class AbpPermissionManagementDomainModule : AbpModule
catch (Exception ex) catch (Exception ex)
{ {
//TODO: We should retry until it's successful! //TODO: We should retry until it's successful!
scope.ServiceProvider scope.ServiceProvider
.GetService<ILogger<AbpPermissionManagementDomainModule>>() .GetService<ILogger<AbpPermissionManagementDomainModule>>()
.LogException(ex); .LogException(ex);

21
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.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.Caching.Distributed; using Microsoft.Extensions.Caching.Distributed;
@ -17,6 +18,7 @@ public class DynamicPermissionDefinitionStore : IDynamicPermissionDefinitionStor
protected IPermissionDefinitionSerializer PermissionDefinitionSerializer { get; } protected IPermissionDefinitionSerializer PermissionDefinitionSerializer { get; }
protected IDynamicPermissionDefinitionStoreInMemoryCache StoreCache { get; } protected IDynamicPermissionDefinitionStoreInMemoryCache StoreCache { get; }
protected IDistributedCache DistributedCache { get; } protected IDistributedCache DistributedCache { get; }
public PermissionManagementOptions PermissionManagementOptions { get; }
protected AbpDistributedCacheOptions CacheOptions { get; } protected AbpDistributedCacheOptions CacheOptions { get; }
public DynamicPermissionDefinitionStore( public DynamicPermissionDefinitionStore(
@ -25,30 +27,47 @@ public class DynamicPermissionDefinitionStore : IDynamicPermissionDefinitionStor
IPermissionDefinitionSerializer permissionDefinitionSerializer, IPermissionDefinitionSerializer permissionDefinitionSerializer,
IDynamicPermissionDefinitionStoreInMemoryCache storeCache, IDynamicPermissionDefinitionStoreInMemoryCache storeCache,
IDistributedCache distributedCache, IDistributedCache distributedCache,
IOptions<AbpDistributedCacheOptions> cacheOptions) IOptions<AbpDistributedCacheOptions> cacheOptions,
IOptions<PermissionManagementOptions> permissionManagementOptions)
{ {
PermissionGroupRepository = permissionGroupRepository; PermissionGroupRepository = permissionGroupRepository;
PermissionRepository = permissionRepository; PermissionRepository = permissionRepository;
PermissionDefinitionSerializer = permissionDefinitionSerializer; PermissionDefinitionSerializer = permissionDefinitionSerializer;
StoreCache = storeCache; StoreCache = storeCache;
DistributedCache = distributedCache; DistributedCache = distributedCache;
PermissionManagementOptions = permissionManagementOptions.Value;
CacheOptions = cacheOptions.Value; CacheOptions = cacheOptions.Value;
} }
public virtual async Task<PermissionDefinition> GetOrNullAsync(string name) public virtual async Task<PermissionDefinition> GetOrNullAsync(string name)
{ {
if (!PermissionManagementOptions.IsDynamicPermissionStoreEnabled)
{
return null;
}
await EnsureCacheIsUptoDateAsync(); await EnsureCacheIsUptoDateAsync();
return StoreCache.GetPermissionOrNull(name); return StoreCache.GetPermissionOrNull(name);
} }
public virtual async Task<IReadOnlyList<PermissionDefinition>> GetPermissionsAsync() public virtual async Task<IReadOnlyList<PermissionDefinition>> GetPermissionsAsync()
{ {
if (!PermissionManagementOptions.IsDynamicPermissionStoreEnabled)
{
return Array.Empty<PermissionDefinition>();
}
await EnsureCacheIsUptoDateAsync(); await EnsureCacheIsUptoDateAsync();
return StoreCache.GetPermissions(); return StoreCache.GetPermissions();
} }
public virtual async Task<IReadOnlyList<PermissionGroupDefinition>> GetGroupsAsync() public virtual async Task<IReadOnlyList<PermissionGroupDefinition>> GetGroupsAsync()
{ {
if (!PermissionManagementOptions.IsDynamicPermissionStoreEnabled)
{
return Array.Empty<PermissionGroupDefinition>();
}
await EnsureCacheIsUptoDateAsync(); await EnsureCacheIsUptoDateAsync();
return StoreCache.GetGroups(); return StoreCache.GetGroups();
} }

11
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManagementOptions.cs

@ -10,7 +10,18 @@ public class PermissionManagementOptions
public Dictionary<string, string> ProviderPolicies { get; } public Dictionary<string, string> ProviderPolicies { get; }
public HashSet<string> DeletedPermissions { get; } public HashSet<string> DeletedPermissions { get; }
public HashSet<string> DeletedPermissionGroups { get; } public HashSet<string> DeletedPermissionGroups { get; }
/// <summary>
/// Default: true.
/// </summary>
public bool SaveStaticPermissionsToDatabase { get; set; } = true;
/// <summary>
/// Default: false.
/// </summary>
public bool IsDynamicPermissionStoreEnabled { get; set; }
public PermissionManagementOptions() public PermissionManagementOptions()
{ {

Loading…
Cancel
Save