diff --git a/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj b/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj index cd2d5ded52..a5f58ac0e3 100644 --- a/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj +++ b/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj @@ -16,6 +16,7 @@ + diff --git a/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityDomainModule.cs b/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityDomainModule.cs index 6178bc05fa..ae29666b8e 100644 --- a/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityDomainModule.cs +++ b/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityDomainModule.cs @@ -1,10 +1,12 @@ using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Modularity; +using Volo.Abp.Permissions; namespace Volo.Abp.Identity { - [DependsOn(typeof(AbpIdentityDomainSharedModule))] + [DependsOn(typeof(AbpPermissionsDomainModule))] [DependsOn(typeof(AbpDddModule))] + [DependsOn(typeof(AbpIdentityDomainSharedModule))] public class AbpIdentityDomainModule : AbpModule { public override void ConfigureServices(IServiceCollection services) diff --git a/src/Volo.Abp.Identity.Domain/Volo/Abp/Permissions/UserPermissionManagerExtensions.cs b/src/Volo.Abp.Identity.Domain/Volo/Abp/Permissions/UserPermissionManagerExtensions.cs new file mode 100644 index 0000000000..1ea6696f39 --- /dev/null +++ b/src/Volo.Abp.Identity.Domain/Volo/Abp/Permissions/UserPermissionManagerExtensions.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using JetBrains.Annotations; + +namespace Volo.Abp.Permissions +{ + public static class UserPermissionManagerExtensions + { + private const string ProviderName = "User"; //TODO: Share same const with UserPermissionValueProvider + + public static Task IsGrantedForUserAsync(this IPermissionManager permissionManager, [NotNull] string name, Guid userId) + { + return permissionManager.IsGrantedAsync(name, ProviderName, userId.ToString()); + } + + public static Task> GetAllGrantedForUserAsync(this IPermissionManager permissionManager, Guid userId) + { + return permissionManager.GetAllGrantedAsync(ProviderName, userId.ToString()); + } + + public static Task GrantForUserAsync(this IPermissionManager permissionManager, Guid userId, [NotNull] string name) + { + return permissionManager.GrantAsync(name, ProviderName, userId.ToString()); + } + + public static Task RevokeForUserAsync(this IPermissionManager permissionManager, Guid userId, [NotNull] string name) + { + return permissionManager.RevokeAsync(name, ProviderName, userId.ToString()); + } + } +} diff --git a/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/IPermissionManager.cs b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/IPermissionManager.cs new file mode 100644 index 0000000000..da4862e3b1 --- /dev/null +++ b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/IPermissionManager.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using JetBrains.Annotations; + +namespace Volo.Abp.Permissions +{ + public interface IPermissionManager + { + Task IsGrantedAsync([NotNull]string name, [NotNull] string providerName, [NotNull] string providerKey); + + Task> GetAllGrantedAsync([NotNull] string providerName, [NotNull] string providerKey); + + Task GrantAsync( [NotNull] string providerName, [NotNull] string providerKey, [NotNull] string name); + + Task RevokeAsync([NotNull] string name, [NotNull] string providerName, [NotNull] string providerKey); + } +} \ No newline at end of file diff --git a/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionGrant.cs b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionGrant.cs index 74c03eba0b..38d0cc4c0a 100644 --- a/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionGrant.cs +++ b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionGrant.cs @@ -9,10 +9,10 @@ namespace Volo.Abp.Permissions [NotNull] public virtual string Name { get; protected set; } - [CanBeNull] + [NotNull] public virtual string ProviderName { get; protected set; } - [CanBeNull] + [NotNull] public virtual string ProviderKey { get; protected set; } protected PermissionGrant() @@ -23,8 +23,8 @@ namespace Volo.Abp.Permissions public PermissionGrant( Guid id, [NotNull] string name, - [CanBeNull] string providerName = null, - [CanBeNull] string providerKey = null) + [NotNull] string providerName , + [NotNull] string providerKey) { Check.NotNull(name, nameof(name)); diff --git a/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionManager.cs b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionManager.cs new file mode 100644 index 0000000000..787e92a7d5 --- /dev/null +++ b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionManager.cs @@ -0,0 +1,85 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Guids; + +namespace Volo.Abp.Permissions +{ + public class PermissionManager : IPermissionManager, ISingletonDependency + { + protected IPermissionGrantRepository PermissionGrantRepository { get; } + protected IPermissionDefinitionManager PermissionDefinitionManager { get; } + protected IGuidGenerator GuidGenerator { get; } + + public PermissionManager( + IPermissionDefinitionManager permissionDefinitionManager, + IPermissionGrantRepository permissionGrantRepository, + IGuidGenerator guidGenerator) + { + GuidGenerator = guidGenerator; + PermissionGrantRepository = permissionGrantRepository; + PermissionDefinitionManager = permissionDefinitionManager; + } + + public async Task IsGrantedAsync(string providerName, string providerKey, string name) + { + Check.NotNull(providerName, nameof(providerName)); + Check.NotNull(providerKey, nameof(providerKey)); + Check.NotNull(name, nameof(name)); + + return await PermissionGrantRepository.FindAsync(name, providerName, providerKey) != null; + } + + public async Task> GetAllGrantedAsync(string providerName, string providerKey) + { + Check.NotNull(providerName, nameof(providerName)); + Check.NotNull(providerKey, nameof(providerKey)); + + return (await PermissionGrantRepository.GetListAsync(providerName, providerKey)) + .Select(p => p.Name) + .ToList(); + } + + public async Task GrantAsync(string providerName, string providerKey, string name) + { + Check.NotNull(providerName, nameof(providerName)); + Check.NotNull(providerKey, nameof(providerKey)); + Check.NotNull(name, nameof(name)); + + if (await IsGrantedAsync(providerName, providerKey, name)) + { + return; + } + + await PermissionGrantRepository.InsertAsync( + new PermissionGrant( + GuidGenerator.Create(), + name, + providerName, + providerKey + ) + ); + } + + public async Task RevokeAsync(string providerName, string providerKey, string name) + { + Check.NotNull(providerName, nameof(providerName)); + Check.NotNull(providerKey, nameof(providerKey)); + Check.NotNull(name, nameof(name)); + + if (await IsGrantedAsync(providerName, providerKey, name)) + { + return; + } + + var grant = await PermissionGrantRepository.FindAsync(name, providerName, providerKey); + if (grant == null) + { + return; + } + + await PermissionGrantRepository.DeleteAsync(grant); + } + } +} \ 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 b1df4a658d..9ed13f844e 100644 --- a/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionStore.cs +++ b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionStore.cs @@ -1,6 +1,4 @@ -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; +using System.Threading.Tasks; using Volo.Abp.DependencyInjection; namespace Volo.Abp.Permissions @@ -18,33 +16,5 @@ namespace Volo.Abp.Permissions { return await _permissionGrantRepository.FindAsync(name, providerName, providerKey) != null; } - - public async Task AddAsync(string name, string providerName, string providerKey) - { - var permissionGrant = await _permissionGrantRepository.FindAsync(name, providerName, providerKey); - if (permissionGrant != null) - { - return; - } - - await _permissionGrantRepository.InsertAsync( - new PermissionGrant(GuidGenerator.Create(), name, providerName, providerKey) - ); - } - - public async Task> GetAllGrantedAsync(string providerName, string providerKey) - { - var permissionGrants = await _permissionGrantRepository.GetListAsync(providerName, providerKey); - return permissionGrants.Select(s => s.Name).ToList(); - } - - public async Task RemoveAsync(string name, string providerName, string providerKey) - { - var permissionGrant = await _permissionGrantRepository.FindAsync(name, providerName, providerKey); - if (permissionGrant != null) - { - await _permissionGrantRepository.DeleteAsync(permissionGrant); - } - } } } diff --git a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionChecker.cs b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionChecker.cs new file mode 100644 index 0000000000..73fade810d --- /dev/null +++ b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionChecker.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using JetBrains.Annotations; + +namespace Volo.Abp.Permissions +{ + public interface IPermissionChecker + { + Task IsGrantedAsync([NotNull]string name); + + Task> GetAllAsync(); + } +} \ No newline at end of file diff --git a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionManager.cs b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionManager.cs deleted file mode 100644 index d1c81293e9..0000000000 --- a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionManager.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Collections.Generic; -using System.Threading.Tasks; -using JetBrains.Annotations; - -namespace Volo.Abp.Permissions -{ - //TODO: Change fallback to inherit? - - public interface IPermissionManager - { - Task IsGrantedAsync([NotNull]string name); - - Task IsGrantedAsync([NotNull]string name, [NotNull] string providerName, [CanBeNull] string providerKey, bool fallback = true); - - Task> GetAllAsync(); - - Task> GetAllAsync([NotNull] string providerName, [CanBeNull] string providerKey, bool fallback = true); - - Task SetAsync([NotNull] string name, bool isGranted, [NotNull] string providerName, [CanBeNull] string providerKey, bool forceToSet = false); - } -} \ No newline at end of file diff --git a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionStore.cs b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionStore.cs index 17b6a0b51a..e27ad54262 100644 --- a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionStore.cs +++ b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionStore.cs @@ -1,5 +1,4 @@ -using System.Collections.Generic; -using System.Threading.Tasks; +using System.Threading.Tasks; using JetBrains.Annotations; namespace Volo.Abp.Permissions @@ -7,11 +6,5 @@ namespace Volo.Abp.Permissions public interface IPermissionStore { Task IsGrantedAsync([NotNull] string name, [CanBeNull] string providerName, [CanBeNull] string providerKey); - - Task> GetAllGrantedAsync([CanBeNull] string providerName, [CanBeNull] string providerKey); - - Task AddAsync([NotNull] string name, [CanBeNull] string providerName, [CanBeNull] string providerKey); - - Task RemoveAsync([NotNull] string name, [CanBeNull]string providerName, [CanBeNull]string providerKey); } } diff --git a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionValueProvider.cs b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionValueProvider.cs index cc26eb8a67..8566a33534 100644 --- a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionValueProvider.cs +++ b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionValueProvider.cs @@ -7,10 +7,10 @@ namespace Volo.Abp.Permissions { string Name { get; } - Task IsGrantedAsync([NotNull] PermissionDefinition permission, [CanBeNull] string providerName, [CanBeNull] string providerKey); + //Task SetAsync([NotNull] PermissionDefinition permission, bool isGranted, [CanBeNull] string providerKey); - Task SetAsync([NotNull] PermissionDefinition permission, bool isGranted, [CanBeNull] string providerKey); + //Task ClearAsync([NotNull] PermissionDefinition permission, [CanBeNull] string providerKey); - Task ClearAsync([NotNull] PermissionDefinition permission, [CanBeNull] string providerKey); + Task IsGrantedAsync(PermissionDefinition permission); } } \ No newline at end of file diff --git a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/NullPermissionStore.cs b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/NullPermissionStore.cs index 308b533d34..d9ab2546dc 100644 --- a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/NullPermissionStore.cs +++ b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/NullPermissionStore.cs @@ -1,5 +1,4 @@ -using System.Collections.Generic; -using System.Threading.Tasks; +using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Volo.Abp.DependencyInjection; @@ -19,21 +18,5 @@ namespace Volo.Abp.Permissions { return Task.FromResult(false); } - - public Task AddAsync(string name, string providerName, string providerKey) - { - Logger.LogWarning($"Setting the grant value for {name} is not possible because current permission store is {nameof(NullPermissionStore)}"); - return Task.CompletedTask; - } - - public Task> GetAllGrantedAsync(string providerName, string providerKey) - { - return Task.FromResult(new List()); - } - - public Task RemoveAsync(string name, string providerName, string providerKey) - { - return Task.CompletedTask; - } } } \ No newline at end of file diff --git a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionChecker.cs b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionChecker.cs new file mode 100644 index 0000000000..cc1ac7496a --- /dev/null +++ b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionChecker.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Permissions +{ + public class PermissionChecker : IPermissionChecker, ITransientDependency + { + protected IPermissionDefinitionManager PermissionDefinitionManager { get; } + + protected Lazy> Providers { get; } + + protected PermissionOptions Options { get; } + + public PermissionChecker( + IOptions options, + IServiceProvider serviceProvider, + IPermissionDefinitionManager permissionDefinitionManager) + { + PermissionDefinitionManager = permissionDefinitionManager; + Options = options.Value; + + Providers = new Lazy>( + () => Options + .ValueProviders + .Select(c => serviceProvider.GetRequiredService(c) as IPermissionValueProvider) + .ToList(), + true + ); + } + + public async Task IsGrantedAsync(string name) + { + var permission = PermissionDefinitionManager.Get(name); + + foreach (var provider in Providers.Value) + { + if (await provider.IsGrantedAsync(permission)) + { + return true; + } + } + + return false; + } + + public virtual async Task> GetAllAsync() + { + var permissionDefinitions = PermissionDefinitionManager.GetAll(); + var permissionGrantInfos = new Dictionary(); + + foreach (var permission in permissionDefinitions) + { + permissionGrantInfos[permission.Name] = await GetPermissionGrantInfo(permission); + } + + return permissionGrantInfos.Values.ToList(); + } + + private async Task GetPermissionGrantInfo(PermissionDefinition permission) + { + foreach (var provider in Providers.Value) + { + if (await provider.IsGrantedAsync(permission)) + { + return new PermissionGrantInfo(permission.Name, true, provider.Name); + } + } + + return new PermissionGrantInfo(permission.Name, false); + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionManager.cs b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionManager.cs deleted file mode 100644 index 33c397cbf3..0000000000 --- a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionManager.cs +++ /dev/null @@ -1,168 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using JetBrains.Annotations; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Permissions -{ - public class PermissionManager : IPermissionManager, ISingletonDependency - { - protected IPermissionDefinitionManager PermissionDefinitionManager { get; } - - protected Lazy> Providers { get; } - - protected PermissionOptions Options { get; } - - protected IPermissionStore PermissionStore { get; } - - public PermissionManager( - IOptions options, - IServiceProvider serviceProvider, - IPermissionDefinitionManager permissionDefinitionManager, - IPermissionStore permissionStore) - { - PermissionStore = permissionStore; - PermissionDefinitionManager = permissionDefinitionManager; - Options = options.Value; - - Providers = new Lazy>( - () => Options - .ValueProviders - .Select(c => serviceProvider.GetRequiredService(c) as IPermissionValueProvider) - .ToList(), - true - ); - } - - public virtual Task IsGrantedAsync(string name) - { - Check.NotNull(name, nameof(name)); - - return IsGrantedInternalAsync(name, null, null); - } - - public virtual Task IsGrantedAsync(string name, string providerName, string providerKey, bool fallback = true) - { - Check.NotNull(name, nameof(name)); - Check.NotNull(providerName, nameof(providerName)); - - return IsGrantedInternalAsync(name, providerName, providerKey); - } - - public virtual async Task IsGrantedInternalAsync(string name, string providerName, string providerKey, bool fallback = true) - { - var permission = PermissionDefinitionManager.Get(name); - var providers = Enumerable - .Reverse(Providers.Value); - - if (providerName != null) - { - providers = providers.SkipWhile(c => c.Name != providerName); - } - - if (!fallback) - { - providers = providers.TakeWhile(c => c.Name == providerName); - } - - foreach (var provider in providers) - { - var value = await provider.IsGrantedAsync(permission, providerName, providerKey); - if (value != null) - { - return value.Value; - } - } - - return false; - } - - public virtual Task> GetAllAsync() - { - return GetAllFromProvidersAsync(Providers.Value, null); - } - - public virtual async Task> GetAllAsync(string providerName, string providerKey, bool fallback = true) - { - Check.NotNull(providerName, nameof(providerName)); - - var providers = Enumerable.Reverse(Providers.Value) - .SkipWhile(c => c.Name != providerName); - - if (!fallback) - { - providers = providers.TakeWhile(c => c.Name == providerName); - } - - var providerList = providers.Reverse().ToList(); - - return await GetAllFromProvidersAsync(providerList, providerKey); - } - - public virtual async Task SetAsync(string name, bool isGranted, string providerName, string providerKey, bool forceToSet = false) - { - Check.NotNull(name, nameof(name)); - Check.NotNull(providerName, nameof(providerName)); - - var permission = PermissionDefinitionManager.Get(name); - - var providers = Enumerable - .Reverse(Providers.Value) - .SkipWhile(p => p.Name != providerName) - .ToList(); - - if (!providers.Any()) - { - return; - } - - if (providers.Count > 1 && !forceToSet) - { - //Clear the value if it's same as it's fallback value - var fallbackValue = await IsGrantedInternalAsync(name, providers[1].Name, providerKey); - if (fallbackValue == isGranted) - { - return; - } - } - - providers = providers - .TakeWhile(p => p.Name == providerName) - .ToList(); //Getting list for case of there are more than one provider with same name - - foreach (var provider in providers) - { - await provider.SetAsync(permission, isGranted, providerKey); - } - } - - protected virtual async Task> GetAllFromProvidersAsync( - [NotNull] List providers, - [CanBeNull] string providerKey) - { - var permissionDefinitions = PermissionDefinitionManager.GetAll(); - var permissionGrantInfos = new Dictionary(); - - foreach (var permission in permissionDefinitions) - { - permissionGrantInfos[permission.Name] = new PermissionGrantInfo(permission.Name, false); - - foreach (var provider in providers) - { - var value = await provider.IsGrantedAsync(permission, provider.Name, providerKey); - if (value != null) - { - permissionGrantInfos[permission.Name] = - new PermissionGrantInfo(permission.Name, value.Value, provider.Name); - } - } - } - - return permissionGrantInfos.Values.ToList(); - } - } -} \ No newline at end of file diff --git a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionValueProvider.cs b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionValueProvider.cs index a3db1b69f6..a3a41f2e9f 100644 --- a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionValueProvider.cs +++ b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionValueProvider.cs @@ -22,10 +22,12 @@ namespace Volo.Abp.Permissions PermissionStore = permissionStore; } - public abstract Task IsGrantedAsync(PermissionDefinition permission, string providerName, string providerKey); + //public abstract Task IsGrantedAsync(PermissionDefinition permission, string providerName, string providerKey); - public abstract Task SetAsync(PermissionDefinition permission, bool isGranted, string providerKey); + //public abstract Task SetAsync(PermissionDefinition permission, bool isGranted, string providerKey); - public abstract Task ClearAsync(PermissionDefinition permission, string providerKey); + //public abstract Task ClearAsync(PermissionDefinition permission, string providerKey); + + public abstract Task IsGrantedAsync(PermissionDefinition permission); } } \ No newline at end of file diff --git a/src/Volo.Abp.Session/Volo/Abp/Permissions/UserPermissionManagerExtensions.cs b/src/Volo.Abp.Session/Volo/Abp/Permissions/UserPermissionManagerExtensions.cs deleted file mode 100644 index 1b40aa1817..0000000000 --- a/src/Volo.Abp.Session/Volo/Abp/Permissions/UserPermissionManagerExtensions.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using JetBrains.Annotations; -using Volo.Abp.Session; - -namespace Volo.Abp.Permissions -{ - public static class UserPermissionManagerExtensions - { - public static Task IsGrantedForUserAsync(this IPermissionManager permissionManager, [NotNull] string name, Guid userId, bool fallback = true) - { - return permissionManager.IsGrantedAsync(name, UserPermissionValueProvider.ProviderName, userId.ToString(), fallback); - } - - public static Task IsGrantedForCurrentUserAsync(this IPermissionManager permissionManager, [NotNull] string name, bool fallback = true) - { - return permissionManager.IsGrantedAsync(name, UserPermissionValueProvider.ProviderName, null, fallback); - } - - public static Task> GetAllForUserAsync(this IPermissionManager permissionManager, Guid userId, bool fallback = true) - { - return permissionManager.GetAllAsync(UserPermissionValueProvider.ProviderName, userId.ToString(), fallback); - } - - public static Task> GetAllForCurrentUserAsync(this IPermissionManager permissionManager, bool fallback = true) - { - return permissionManager.GetAllAsync(UserPermissionValueProvider.ProviderName, null, fallback); - } - - public static Task SetForUserAsync(this IPermissionManager permissionManager, Guid userId, [NotNull] string name, bool isGranted, bool forceToSet = false) - { - return permissionManager.SetAsync(name, isGranted, UserPermissionValueProvider.ProviderName, userId.ToString(), forceToSet); - } - - public static Task SetForCurrentUserAsync(this IPermissionManager permissionManager, [NotNull] string name, bool isGranted, bool forceToSet = false) - { - return permissionManager.SetAsync(name, isGranted, UserPermissionValueProvider.ProviderName, null, forceToSet); - } - } -} diff --git a/src/Volo.Abp.Session/Volo/Abp/Session/UserPermissionValueProvider.cs b/src/Volo.Abp.Session/Volo/Abp/Session/UserPermissionValueProvider.cs index 1afa8d80a2..6771561a04 100644 --- a/src/Volo.Abp.Session/Volo/Abp/Session/UserPermissionValueProvider.cs +++ b/src/Volo.Abp.Session/Volo/Abp/Session/UserPermissionValueProvider.cs @@ -1,6 +1,4 @@ -using System; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; +using System.Threading.Tasks; using Volo.Abp.Permissions; namespace Volo.Abp.Session @@ -19,73 +17,14 @@ namespace Volo.Abp.Session CurrentUser = currentUser; } - public override async Task IsGrantedAsync(PermissionDefinition permission, string providerName, string providerKey) + public override async Task IsGrantedAsync(PermissionDefinition permission) { - var userId = ParseOrGetCurrentUser(providerName, providerKey); - if (userId == null) + if (CurrentUser.Id == null) { - return null; + return false; } - return await PermissionStore.IsGrantedAsync(permission.Name, Name, userId.ToString()); - } - - protected virtual Guid? ParseOrGetCurrentUser(string providerName, string providerKey) - { - if (providerName == null) - { - return CurrentUser.Id; - } - - if (providerName == Name) - { - if (providerKey == null) - { - return CurrentUser.Id; - } - - if (!Guid.TryParse(providerKey, out var result)) - { - throw new AbpException("UserId should be a Guid!"); - } - - return result; - } - - return null; - } - - public override Task SetAsync(PermissionDefinition permission, bool isGranted, string providerKey) - { - var userId = ParseOrGetCurrentUser(Name, providerKey); - if (userId == null) - { - Logger.LogWarning($"Could not set the permission '{permission}' because the user id is not available!"); - return Task.CompletedTask; - } - - //TODO: Seperate SetAsync to AddGrant / RemoveGrant - - if (isGranted) - { - return PermissionStore.AddAsync(permission.Name, Name, userId.ToString()); - } - else - { - return PermissionStore.RemoveAsync(permission.Name, Name, userId.ToString()); - } - } - - public override Task ClearAsync(PermissionDefinition permission, string providerKey) - { - var userId = ParseOrGetCurrentUser(Name, providerKey); - if (userId == null) - { - Logger.LogWarning($"Could not clear the permission '{permission}' because the user id is not available!"); - return Task.CompletedTask; - } - - return PermissionStore.RemoveAsync(permission.Name, Name, providerKey); + return await PermissionStore.IsGrantedAsync(permission.Name, Name, CurrentUser.Id.Value.ToString()); } } } diff --git a/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/PermissionManager_Basic_Tests.cs b/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/PermissionManager_Basic_Tests.cs index 9c28d09840..836c510c23 100644 --- a/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/PermissionManager_Basic_Tests.cs +++ b/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/PermissionManager_Basic_Tests.cs @@ -4,27 +4,27 @@ using Xunit; namespace Volo.Abp.Permissions { - public class PermissionManager_Basic_Tests : PermissionTestBase + public class PermissionChecker_Basic_Tests : PermissionTestBase { - private readonly IPermissionManager _permissionManager; + private readonly IPermissionChecker _permissionChecker; - public PermissionManager_Basic_Tests() + public PermissionChecker_Basic_Tests() { - _permissionManager = GetRequiredService(); + _permissionChecker = GetRequiredService(); } [Fact] public async Task Should_Throw_Exception_If_Permission_Is_Not_Defined() { await Assert.ThrowsAsync(async () => - await _permissionManager.IsGrantedAsync("UndefinedPermissionName") + await _permissionChecker.IsGrantedAsync("UndefinedPermissionName") ); } [Fact] public async Task Should_Return_False_As_Default_For_Any_Permission() { - (await _permissionManager.IsGrantedAsync("MyPermission1")).ShouldBeFalse(); + (await _permissionChecker.IsGrantedAsync("MyPermission1")).ShouldBeFalse(); } } } diff --git a/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/PermissionManager_User_Tests.cs b/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/PermissionManager_User_Tests.cs index cd46d50746..d7873314b9 100644 --- a/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/PermissionManager_User_Tests.cs +++ b/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/PermissionManager_User_Tests.cs @@ -10,13 +10,13 @@ namespace Volo.Abp.Permissions { public class PermissionManager_User_Tests : PermissionTestBase { - private readonly IPermissionManager _permissionManager; + private readonly IPermissionChecker _permissionChecker; private Guid? _currentUserId; public PermissionManager_User_Tests() { - _permissionManager = GetRequiredService(); + _permissionChecker = GetRequiredService(); } protected override void AfterAddApplication(IServiceCollection services) @@ -26,40 +26,40 @@ namespace Volo.Abp.Permissions services.AddSingleton(currentUser); } - [Fact] - public async Task Should_Return_True_For_Granted_User() - { - (await _permissionManager.IsGrantedForUserAsync( - "MyPermission1", - PermissionTestDataBuilder.User1Id - )).ShouldBeTrue(); - } + //[Fact] + //public async Task Should_Return_True_For_Granted_User() + //{ + // (await _permissionManager.IsGrantedForUserAsync( + // "MyPermission1", + // PermissionTestDataBuilder.User1Id + // )).ShouldBeTrue(); + //} [Fact] public async Task Should_Return_True_For_Granted_Current_User() { _currentUserId = PermissionTestDataBuilder.User1Id; - (await _permissionManager.IsGrantedForCurrentUserAsync( + (await _permissionChecker.IsGrantedAsync( "MyPermission1" )).ShouldBeTrue(); } - [Fact] - public async Task Should_Return_False_For_Non_Granted_User() - { - (await _permissionManager.IsGrantedForUserAsync( - "MyPermission1", - PermissionTestDataBuilder.User2Id - )).ShouldBeFalse(); - } + //[Fact] + //public async Task Should_Return_False_For_Non_Granted_User() + //{ + // (await _permissionManager.IsGrantedForUserAsync( + // "MyPermission1", + // PermissionTestDataBuilder.User2Id + // )).ShouldBeFalse(); + //} [Fact] public async Task Should_Return_False_For_Non_Granted_Current_User() { _currentUserId = PermissionTestDataBuilder.User2Id; - (await _permissionManager.IsGrantedForCurrentUserAsync( + (await _permissionChecker.IsGrantedAsync( "MyPermission1" )).ShouldBeFalse(); } @@ -67,55 +67,55 @@ namespace Volo.Abp.Permissions [Fact] public async Task Should_Return_False_For_Current_User_If_Anonymous() { - (await _permissionManager.IsGrantedForCurrentUserAsync( + (await _permissionChecker.IsGrantedAsync( "MyPermission1" )).ShouldBeFalse(); } - [Fact] - public async Task Should_Get_List_Of_Granted_Permissions_For_A_User() - { - //User1 - var permission = await _permissionManager.GetAllForUserAsync(PermissionTestDataBuilder.User1Id); - permission.Count.ShouldBeGreaterThan(0); - permission.ShouldContain(p => p.Name == "MyPermission1" && p.IsGranted && p.ProviderName == UserPermissionValueProvider.ProviderName); + //[Fact] + //public async Task Should_Get_List_Of_Granted_Permissions_For_A_User() + //{ + // //User1 + // var permission = await _permissionManager.GetAllForUserAsync(PermissionTestDataBuilder.User1Id); + // permission.Count.ShouldBeGreaterThan(0); + // permission.ShouldContain(p => p.Name == "MyPermission1" && p.IsGranted && p.ProviderName == UserPermissionValueProvider.ProviderName); - //User2 - permission = await _permissionManager.GetAllForUserAsync(PermissionTestDataBuilder.User2Id); - permission.Count.ShouldBeGreaterThan(0); - permission.ShouldContain(p => p.Name == "MyPermission1" && !p.IsGranted); - } + // //User2 + // permission = await _permissionManager.GetAllForUserAsync(PermissionTestDataBuilder.User2Id); + // permission.Count.ShouldBeGreaterThan(0); + // permission.ShouldContain(p => p.Name == "MyPermission1" && !p.IsGranted); + //} [Fact] public async Task Should_Get_List_Of_Granted_Permissions_For_Current_User() { //User1 _currentUserId = PermissionTestDataBuilder.User1Id; - var permission = await _permissionManager.GetAllForCurrentUserAsync(); + var permission = await _permissionChecker.GetAllAsync(); permission.Count.ShouldBeGreaterThan(0); permission.ShouldContain(p => p.Name == "MyPermission1" && p.IsGranted && p.ProviderName == UserPermissionValueProvider.ProviderName); //User2 _currentUserId = PermissionTestDataBuilder.User2Id; - permission = await _permissionManager.GetAllForCurrentUserAsync(); + permission = await _permissionChecker.GetAllAsync(); permission.Count.ShouldBeGreaterThan(0); permission.ShouldContain(p => p.Name == "MyPermission1" && !p.IsGranted); } - [Fact] - public async Task Should_Grant_Permission_For_A_User() - { - (await _permissionManager.IsGrantedForUserAsync( - "MyPermission1", - PermissionTestDataBuilder.User2Id - )).ShouldBeFalse(); - - await _permissionManager.SetForUserAsync(PermissionTestDataBuilder.User2Id, "MyPermission1", true); - - (await _permissionManager.IsGrantedForUserAsync( - "MyPermission1", - PermissionTestDataBuilder.User2Id - )).ShouldBeTrue(); - } + //[Fact] + //public async Task Should_Grant_Permission_For_A_User() + //{ + // (await _permissionManager.IsGrantedForUserAsync( + // "MyPermission1", + // PermissionTestDataBuilder.User2Id + // )).ShouldBeFalse(); + + // await _permissionManager.SetForUserAsync(PermissionTestDataBuilder.User2Id, "MyPermission1", true); + + // (await _permissionManager.IsGrantedForUserAsync( + // "MyPermission1", + // PermissionTestDataBuilder.User2Id + // )).ShouldBeTrue(); + //} } }