Browse Source

Add Provider option to the PermissionDefinition

pull/786/head^2
Halil ibrahim Kalkan 8 years ago
parent
commit
54d14d952d
  1. 1
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationModule.cs
  2. 14
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionChecker.cs
  3. 27
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs
  4. 22
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs

1
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationModule.cs

@ -28,6 +28,7 @@ namespace Volo.Abp.Authorization
{ {
options.ValueProviders.Add<UserPermissionValueProvider>(); options.ValueProviders.Add<UserPermissionValueProvider>();
options.ValueProviders.Add<RolePermissionValueProvider>(); options.ValueProviders.Add<RolePermissionValueProvider>();
options.ValueProviders.Add<ClientPermissionValueProvider>();
}); });
} }
} }

14
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionChecker.cs

@ -1,10 +1,10 @@
using System; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Security.Claims; using System.Security.Claims;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Security.Claims; using Volo.Abp.Security.Claims;
@ -40,7 +40,7 @@ namespace Volo.Abp.Authorization.Permissions
true true
); );
} }
public virtual Task<PermissionGrantInfo> CheckAsync(string name) public virtual Task<PermissionGrantInfo> CheckAsync(string name)
{ {
return CheckAsync(PrincipalAccessor.Principal, name); return CheckAsync(PrincipalAccessor.Principal, name);
@ -57,6 +57,12 @@ namespace Volo.Abp.Authorization.Permissions
foreach (var provider in ValueProviders) foreach (var provider in ValueProviders)
{ {
if (context.Permission.Providers.Any() &&
!context.Permission.Providers.Contains(provider.Name))
{
continue;
}
var result = await provider.CheckAsync(context); var result = await provider.CheckAsync(context);
if (result.IsGranted) if (result.IsGranted)
{ {

27
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs

@ -18,6 +18,8 @@ namespace Volo.Abp.Authorization.Permissions
/// </summary> /// </summary>
public PermissionDefinition Parent { get; private set; } public PermissionDefinition Parent { get; private set; }
public List<string> Providers { get; }
public ILocalizableString DisplayName public ILocalizableString DisplayName
{ {
get => _displayName; get => _displayName;
@ -53,6 +55,7 @@ namespace Volo.Abp.Authorization.Permissions
DisplayName = displayName ?? new FixedLocalizableString(name); DisplayName = displayName ?? new FixedLocalizableString(name);
Properties = new Dictionary<string, object>(); Properties = new Dictionary<string, object>();
Providers = new List<string>();
_children = new List<PermissionDefinition>(); _children = new List<PermissionDefinition>();
} }
@ -68,6 +71,30 @@ namespace Volo.Abp.Authorization.Permissions
return child; return child;
} }
/// <summary>
/// Sets a property in the <see cref="Properties"/> dictionary.
/// This is a shortcut for nested calls on this object.
/// </summary>
public virtual PermissionDefinition WithProperty(string key, object value)
{
Properties[key] = value;
return this;
}
/// <summary>
/// Sets a property in the <see cref="Properties"/> dictionary.
/// This is a shortcut for nested calls on this object.
/// </summary>
public virtual PermissionDefinition WithProviders(params string[] providers)
{
if (!providers.IsNullOrEmpty())
{
Providers.AddRange(providers);
}
return this;
}
public override string ToString() public override string ToString()
{ {
return $"[{nameof(PermissionDefinition)} {Name}]"; return $"[{nameof(PermissionDefinition)} {Name}]";

22
modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs

@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
@ -51,6 +52,11 @@ namespace Volo.Abp.PermissionManagement
foreach (var permission in group.GetPermissionsWithChildren()) foreach (var permission in group.GetPermissionsWithChildren())
{ {
if (permission.Providers.Any() && !permission.Providers.Contains(providerName))
{
continue;
}
var grantInfoDto = new PermissionGrantInfoDto var grantInfoDto = new PermissionGrantInfoDto
{ {
Name = permission.Name, Name = permission.Name,
@ -75,7 +81,10 @@ namespace Volo.Abp.PermissionManagement
groupDto.Permissions.Add(grantInfoDto); groupDto.Permissions.Add(grantInfoDto);
} }
result.Groups.Add(groupDto); if (groupDto.Permissions.Any())
{
result.Groups.Add(groupDto);
}
} }
return result; return result;
@ -85,9 +94,16 @@ namespace Volo.Abp.PermissionManagement
{ {
await CheckProviderPolicy(providerName); await CheckProviderPolicy(providerName);
foreach (var permission in input.Permissions) foreach (var permissionDto in input.Permissions)
{ {
await _permissionManager.SetAsync(permission.Name, providerName, providerKey, permission.IsGranted); var permissionDefinition = _permissionDefinitionManager.Get(permissionDto.Name);
if (permissionDefinition.Providers.Any() &&
!permissionDefinition.Providers.Contains(providerName))
{
throw new ApplicationException($"The permission named '{permissionDto.Name}' has not compatible with the provider named '{providerName}'");
}
await _permissionManager.SetAsync(permissionDto.Name, providerName, providerKey, permissionDto.IsGranted);
} }
} }

Loading…
Cancel
Save