Browse Source

Worked on permission system design.

pull/208/head
Halil İbrahim Kalkan 9 years ago
parent
commit
06a5b136bf
  1. 8
      src/Volo.Abp.Identity.Web/Pages/Identity/Roles/Index.cshtml
  2. 0
      src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/AbpPermissionConsts.cs
  3. 2
      src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionChecker.cs
  4. 7
      src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionValueProvider.cs
  5. 17
      src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionChecker.cs
  6. 12
      src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionCheckerExtensions.cs
  7. 5
      src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionGrantInfo.cs
  8. 18
      src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionValueProvider.cs
  9. 19
      src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionValueProviderGrantInfo.cs
  10. 8
      src/Volo.Abp.Session/Volo/Abp/Session/RolePermissionValueProvider.cs
  11. 9
      src/Volo.Abp.Session/Volo/Abp/Session/UserPermissionValueProvider.cs

8
src/Volo.Abp.Identity.Web/Pages/Identity/Roles/Index.cshtml

@ -8,10 +8,10 @@
} }
@section scripts { @section scripts {
<script type="text/javascript" src="~/modules/identity/helpers/jquery.js"></script> <script type="text/javascript" src="~/abp/helpers/jquery.js"></script>
<script type="text/javascript" src="~/modules/identity/helpers/datatables.extensions.js"></script> <script type="text/javascript" src="~/abp/helpers/datatables.extensions.js"></script>
<script type="text/javascript" src="~/modules/identity/helpers/ResourceLoader.js"></script> <script type="text/javascript" src="~/abp/helpers/ResourceLoader.js"></script>
<script type="text/javascript" src="~/modules/identity/helpers/ModalManager.js"></script> <script type="text/javascript" src="~/abp/helpers/ModalManager.js"></script>
<script type="text/javascript" src="~/modules/identity/views/roles/index.js"></script> <script type="text/javascript" src="~/modules/identity/views/roles/index.js"></script>
} }

0
src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/AbpSettingsConsts.cs → src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/AbpPermissionConsts.cs

2
src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionChecker.cs

@ -6,7 +6,7 @@ namespace Volo.Abp.Permissions
{ {
public interface IPermissionChecker public interface IPermissionChecker
{ {
Task<bool> IsGrantedAsync([NotNull]string name); Task<PermissionGrantInfo> CheckAsync([NotNull]string name);
Task<List<PermissionGrantInfo>> GetAllAsync(); Task<List<PermissionGrantInfo>> GetAllAsync();
} }

7
src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionValueProvider.cs

@ -1,5 +1,4 @@
using System.Threading.Tasks; using System.Threading.Tasks;
using JetBrains.Annotations;
namespace Volo.Abp.Permissions namespace Volo.Abp.Permissions
{ {
@ -7,10 +6,6 @@ namespace Volo.Abp.Permissions
{ {
string Name { get; } string Name { get; }
//Task SetAsync([NotNull] PermissionDefinition permission, bool isGranted, [CanBeNull] string providerKey); Task<PermissionValueProviderGrantInfo> CheckAsync(PermissionDefinition permission);
//Task ClearAsync([NotNull] PermissionDefinition permission, [CanBeNull] string providerKey);
Task<bool> IsGrantedAsync(PermissionDefinition permission);
} }
} }

17
src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionChecker.cs

@ -34,19 +34,11 @@ namespace Volo.Abp.Permissions
); );
} }
public virtual async Task<bool> IsGrantedAsync(string name) public Task<PermissionGrantInfo> CheckAsync(string name)
{ {
var permission = PermissionDefinitionManager.Get(name); var permission = PermissionDefinitionManager.Get(name);
foreach (var provider in Providers) return GetPermissionGrantInfo(permission);
{
if (await provider.IsGrantedAsync(permission))
{
return true;
}
}
return false;
} }
public virtual async Task<List<PermissionGrantInfo>> GetAllAsync() public virtual async Task<List<PermissionGrantInfo>> GetAllAsync()
@ -66,9 +58,10 @@ namespace Volo.Abp.Permissions
{ {
foreach (var provider in Providers) foreach (var provider in Providers)
{ {
if (await provider.IsGrantedAsync(permission)) var result = await provider.CheckAsync(permission);
if (result.IsGranted)
{ {
return new PermissionGrantInfo(permission.Name, true, provider.Name); return new PermissionGrantInfo(permission.Name, true, provider.Name, result.ProviderKey);
} }
} }

12
src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionCheckerExtensions.cs

@ -0,0 +1,12 @@
using System.Threading.Tasks;
namespace Volo.Abp.Permissions
{
public static class PermissionCheckerExtensions
{
public static async Task<bool> IsGrantedAsync(this IPermissionChecker permissionChecker, string name)
{
return (await permissionChecker.CheckAsync(name)).IsGranted;
}
}
}

5
src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionGrantInfo.cs

@ -10,13 +10,16 @@ namespace Volo.Abp.Permissions
public string ProviderName { get; } public string ProviderName { get; }
public PermissionGrantInfo([NotNull] string name, bool isGranted, [CanBeNull] string providerName = null) public string ProviderKey { get; }
public PermissionGrantInfo([NotNull] string name, bool isGranted, [CanBeNull] string providerName = null, [CanBeNull] string providerKey = null)
{ {
Check.NotNull(name, nameof(name)); Check.NotNull(name, nameof(name));
Name = name; Name = name;
IsGranted = isGranted; IsGranted = isGranted;
ProviderName = providerName; ProviderName = providerName;
ProviderKey = providerKey;
} }
} }
} }

18
src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionValueProvider.cs

@ -1,7 +1,4 @@
using System; using System.Threading.Tasks;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Permissions namespace Volo.Abp.Permissions
@ -10,24 +7,13 @@ namespace Volo.Abp.Permissions
{ {
public abstract string Name { get; } public abstract string Name { get; }
public ILoggerFactory LoggerFactory { get; set; }
protected IPermissionStore PermissionStore { get; } protected IPermissionStore PermissionStore { get; }
protected ILogger Logger => _lazyLogger.Value;
private Lazy<ILogger> _lazyLogger => new Lazy<ILogger>(() => LoggerFactory?.CreateLogger(GetType().FullName) ?? NullLogger.Instance, true);
protected PermissionValueProvider(IPermissionStore permissionStore) protected PermissionValueProvider(IPermissionStore permissionStore)
{ {
PermissionStore = permissionStore; PermissionStore = permissionStore;
} }
//public abstract Task<bool?> IsGrantedAsync(PermissionDefinition permission, string providerName, string providerKey); public abstract Task<PermissionValueProviderGrantInfo> CheckAsync(PermissionDefinition permission);
//public abstract Task SetAsync(PermissionDefinition permission, bool isGranted, string providerKey);
//public abstract Task ClearAsync(PermissionDefinition permission, string providerKey);
public abstract Task<bool> IsGrantedAsync(PermissionDefinition permission);
} }
} }

19
src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionValueProviderGrantInfo.cs

@ -0,0 +1,19 @@
using JetBrains.Annotations;
namespace Volo.Abp.Permissions
{
public class PermissionValueProviderGrantInfo
{
public static PermissionValueProviderGrantInfo NonGranted { get; } = new PermissionValueProviderGrantInfo(false);
public virtual bool IsGranted { get; }
public virtual string ProviderKey { get; }
public PermissionValueProviderGrantInfo(bool isGranted, [CanBeNull] string providerKey = null)
{
IsGranted = isGranted;
ProviderKey = providerKey;
}
}
}

8
src/Volo.Abp.Session/Volo/Abp/Session/RolePermissionValueProvider.cs

@ -18,22 +18,22 @@ namespace Volo.Abp.Session
CurrentUser = currentUser; CurrentUser = currentUser;
} }
public override async Task<bool> IsGrantedAsync(PermissionDefinition permission) public override async Task<PermissionValueProviderGrantInfo> CheckAsync(PermissionDefinition permission)
{ {
if (CurrentUser.Id == null || !CurrentUser.Roles.Any()) if (CurrentUser.Id == null || !CurrentUser.Roles.Any())
{ {
return false; return PermissionValueProviderGrantInfo.NonGranted;
} }
foreach (var role in CurrentUser.Roles) foreach (var role in CurrentUser.Roles)
{ {
if (await PermissionStore.IsGrantedAsync(permission.Name, Name, role)) if (await PermissionStore.IsGrantedAsync(permission.Name, Name, role))
{ {
return true; return new PermissionValueProviderGrantInfo(true, role);
} }
} }
return false; return PermissionValueProviderGrantInfo.NonGranted;
} }
} }
} }

9
src/Volo.Abp.Session/Volo/Abp/Session/UserPermissionValueProvider.cs

@ -17,14 +17,17 @@ namespace Volo.Abp.Session
CurrentUser = currentUser; CurrentUser = currentUser;
} }
public override async Task<bool> IsGrantedAsync(PermissionDefinition permission) public override async Task<PermissionValueProviderGrantInfo> CheckAsync(PermissionDefinition permission)
{ {
if (CurrentUser.Id == null) if (CurrentUser.Id == null)
{ {
return false; return PermissionValueProviderGrantInfo.NonGranted;
} }
return await PermissionStore.IsGrantedAsync(permission.Name, Name, CurrentUser.Id.Value.ToString()); return new PermissionValueProviderGrantInfo(
await PermissionStore.IsGrantedAsync(permission.Name, Name, CurrentUser.Id.Value.ToString()),
CurrentUser.Id.ToString()
);
} }
} }
} }

Loading…
Cancel
Save