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 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<IOptions<PermissionManagementOptions>>()
.Value
.SaveStaticPermissionsToDatabase)
{
SaveStaticPermissionsToDatabase(context);
}
}
private static void SaveStaticPermissionsToDatabase(ApplicationInitializationContext context)
{
Task.Run(async () =>
{
@ -26,7 +39,7 @@ public class AbpPermissionManagementDomainModule : AbpModule
.ServiceProvider
.GetRequiredService<IRootServiceProvider>()
.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<ILogger<AbpPermissionManagementDomainModule>>()
.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.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<AbpDistributedCacheOptions> cacheOptions)
IOptions<AbpDistributedCacheOptions> cacheOptions,
IOptions<PermissionManagementOptions> permissionManagementOptions)
{
PermissionGroupRepository = permissionGroupRepository;
PermissionRepository = permissionRepository;
PermissionDefinitionSerializer = permissionDefinitionSerializer;
StoreCache = storeCache;
DistributedCache = distributedCache;
PermissionManagementOptions = permissionManagementOptions.Value;
CacheOptions = cacheOptions.Value;
}
public virtual async Task<PermissionDefinition> GetOrNullAsync(string name)
{
if (!PermissionManagementOptions.IsDynamicPermissionStoreEnabled)
{
return null;
}
await EnsureCacheIsUptoDateAsync();
return StoreCache.GetPermissionOrNull(name);
}
public virtual async Task<IReadOnlyList<PermissionDefinition>> GetPermissionsAsync()
{
if (!PermissionManagementOptions.IsDynamicPermissionStoreEnabled)
{
return Array.Empty<PermissionDefinition>();
}
await EnsureCacheIsUptoDateAsync();
return StoreCache.GetPermissions();
}
public virtual async Task<IReadOnlyList<PermissionGroupDefinition>> GetGroupsAsync()
{
if (!PermissionManagementOptions.IsDynamicPermissionStoreEnabled)
{
return Array.Empty<PermissionGroupDefinition>();
}
await EnsureCacheIsUptoDateAsync();
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 HashSet<string> DeletedPermissions { 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()
{

Loading…
Cancel
Save