diff --git a/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionGrantCacheItem.cs b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionGrantCacheItem.cs index 43e8db456f..9bc9c69ffd 100644 --- a/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionGrantCacheItem.cs +++ b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionGrantCacheItem.cs @@ -19,5 +19,10 @@ namespace Volo.Abp.Permissions Name = name; IsGranted = isGranted; } + + public static string CalculateCacheKey(string name, string providerName, string providerKey) + { + return "pn:" + providerName + ",pk:" + providerKey + ",n:" + name; + } } } \ No newline at end of file diff --git a/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionGrantCacheItemInvalidator.cs b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionGrantCacheItemInvalidator.cs new file mode 100644 index 0000000000..5d956735f2 --- /dev/null +++ b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionGrantCacheItemInvalidator.cs @@ -0,0 +1,41 @@ +using System.Threading.Tasks; +using Volo.Abp.Caching; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Entities.Events; +using Volo.Abp.EventBus; +using Volo.Abp.MultiTenancy; + +namespace Volo.Abp.Permissions +{ + public class PermissionGrantCacheItemInvalidator : IAsyncEventHandler>, ITransientDependency + { + protected ICurrentTenant CurrentTenant { get; } + + protected IDistributedCache Cache { get; } + + public PermissionGrantCacheItemInvalidator(IDistributedCache cache, ICurrentTenant currentTenant) + { + Cache = cache; + CurrentTenant = currentTenant; + } + + public virtual async Task HandleEventAsync(EntityChangedEventData eventData) + { + var cacheKey = CalculateCacheKey( + eventData.Entity.Name, + eventData.Entity.ProviderName, + eventData.Entity.ProviderKey + ); + + using (CurrentTenant.Change(eventData.Entity.TenantId)) + { + await Cache.RemoveAsync(cacheKey); + } + } + + protected virtual string CalculateCacheKey(string name, string providerName, string providerKey) + { + return PermissionGrantCacheItem.CalculateCacheKey(name, providerName, providerKey); + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionStore.cs b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionStore.cs index d09ba8745e..621b7e81e3 100644 --- a/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionStore.cs +++ b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionStore.cs @@ -2,47 +2,27 @@ using Volo.Abp.Authorization.Permissions; using Volo.Abp.Caching; using Volo.Abp.DependencyInjection; -using Volo.Abp.Domain.Entities.Events; -using Volo.Abp.EventBus; -using Volo.Abp.MultiTenancy; namespace Volo.Abp.Permissions { - //TODO: Extract cache invalidate logic to another class - public class PermissionStore : IPermissionStore, IAsyncEventHandler>, ITransientDependency + public class PermissionStore : IPermissionStore, ITransientDependency { protected IPermissionGrantRepository PermissionGrantRepository { get; } + protected IDistributedCache Cache { get; } - protected ICurrentTenant CurrentTenant { get; } public PermissionStore( IPermissionGrantRepository permissionGrantRepository, - IDistributedCache cache, - ICurrentTenant currentTenant) + IDistributedCache cache) { PermissionGrantRepository = permissionGrantRepository; Cache = cache; - CurrentTenant = currentTenant; } public async Task IsGrantedAsync(string name, string providerName, string providerKey) { return (await GetCacheItemAsync(name, providerName, providerKey)).IsGranted; } - - public virtual async Task HandleEventAsync(EntityChangedEventData eventData) - { - var cacheKey = CalculateCacheKey( - eventData.Entity.Name, - eventData.Entity.ProviderName, - eventData.Entity.ProviderKey - ); - - using (CurrentTenant.Change(eventData.Entity.TenantId)) - { - await Cache.RemoveAsync(cacheKey); - } - } protected virtual async Task GetCacheItemAsync(string name, string providerName, string providerKey) { @@ -66,10 +46,10 @@ namespace Volo.Abp.Permissions return cacheItem; } - + protected virtual string CalculateCacheKey(string name, string providerName, string providerKey) { - return "pn:" + providerName + ",pk:" + providerKey + ",n:" + name; + return PermissionGrantCacheItem.CalculateCacheKey(name, providerName, providerKey); } } }