Browse Source

Support undefined permissions in PermissionManager.

pull/13644/head
Halil İbrahim Kalkan 4 years ago
parent
commit
8369764170
  1. 68
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs
  2. 6
      modules/permission-management/test/Volo.Abp.PermissionManagement.Domain.Tests/Volo/Abp/PermissionManagement/PermissionChecker_Basic_Tests.cs
  3. 16
      modules/permission-management/test/Volo.Abp.PermissionManagement.Domain.Tests/Volo/Abp/PermissionManagement/PermissionManager_Tests.cs

68
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs

@ -62,27 +62,57 @@ public class PermissionManager : IPermissionManager, ISingletonDependency
public virtual async Task<PermissionWithGrantedProviders> GetAsync(string permissionName, string providerName, string providerKey)
{
var permission = await PermissionDefinitionManager.GetOrNullAsync(permissionName);
if (permission == null)
{
return new PermissionWithGrantedProviders(permissionName, false);
}
return await GetInternalAsync(
await PermissionDefinitionManager.GetAsync(permissionName),
permission,
providerName,
providerKey
);
}
public virtual async Task<MultiplePermissionWithGrantedProviders> GetAsync(string[] permissionNames, string providerName, string providerKey)
public virtual async Task<MultiplePermissionWithGrantedProviders> GetAsync(
string[] permissionNames,
string providerName,
string providerKey)
{
var permissionDefinitions = new PermissionDefinition[permissionNames.Length];
var permissions = new List<PermissionDefinition>();
var undefinedPermissions = new List<string>();
foreach (var permissionName in permissionNames)
{
var permission = await PermissionDefinitionManager.GetOrNullAsync(permissionName);
if (permission != null)
{
permissions.Add(permission);
}
else
{
undefinedPermissions.Add(permissionName);
}
}
for (var i = 0; i < permissionNames.Length; i++)
if (!permissions.Any())
{
permissionDefinitions[i] = await PermissionDefinitionManager.GetAsync(permissionNames[i]);
return new MultiplePermissionWithGrantedProviders(undefinedPermissions.ToArray());
}
return await GetInternalAsync(
permissionDefinitions,
var result = await GetInternalAsync(
permissions.ToArray(),
providerName,
providerKey
);
foreach (var undefinedPermission in undefinedPermissions)
{
result.Result.Add(new PermissionWithGrantedProviders(undefinedPermission, false));
}
return result;
}
public virtual async Task<List<PermissionWithGrantedProviders>> GetAllAsync(string providerName, string providerKey)
@ -97,7 +127,13 @@ public class PermissionManager : IPermissionManager, ISingletonDependency
public virtual async Task SetAsync(string permissionName, string providerName, string providerKey, bool isGranted)
{
var permission = await PermissionDefinitionManager.GetAsync(permissionName);
var permission = await PermissionDefinitionManager.GetOrNullAsync(permissionName);
if (permission == null)
{
/* Silently ignore undefined permissions,
maybe they were removed from dynamic permission definition store */
return;
}
if (!permission.IsEnabled || !await SimpleStateCheckerManager.IsEnabledAsync(permission))
{
@ -160,14 +196,24 @@ public class PermissionManager : IPermissionManager, ISingletonDependency
}
}
protected virtual async Task<PermissionWithGrantedProviders> GetInternalAsync(PermissionDefinition permission, string providerName, string providerKey)
protected virtual async Task<PermissionWithGrantedProviders> GetInternalAsync(
PermissionDefinition permission,
string providerName,
string providerKey)
{
var multiplePermissionWithGrantedProviders = await GetInternalAsync(new PermissionDefinition[] { permission }, providerName, providerKey);
var multiplePermissionWithGrantedProviders = await GetInternalAsync(
new[] { permission },
providerName,
providerKey
);
return multiplePermissionWithGrantedProviders.Result.First();
}
protected virtual async Task<MultiplePermissionWithGrantedProviders> GetInternalAsync(PermissionDefinition[] permissions, string providerName, string providerKey)
protected virtual async Task<MultiplePermissionWithGrantedProviders> GetInternalAsync(
PermissionDefinition[] permissions,
string providerName,
string providerKey)
{
var permissionNames = permissions.Select(x => x.Name).ToArray();
var multiplePermissionWithGrantedProviders = new MultiplePermissionWithGrantedProviders(permissionNames);

6
modules/permission-management/test/Volo.Abp.PermissionManagement.Domain.Tests/Volo/Abp/PermissionManagement/PermissionChecker_Basic_Tests.cs

@ -15,11 +15,9 @@ public class PermissionChecker_Basic_Tests : PermissionTestBase
}
[Fact]
public async Task Should_Throw_Exception_If_Permission_Is_Not_Defined()
public async Task Should_Return_Prohibited_If_Permission_Is_Not_Defined()
{
await Assert.ThrowsAsync<AbpException>(async () =>
await _permissionChecker.IsGrantedAsync("UndefinedPermissionName")
);
(await _permissionChecker.IsGrantedAsync("UndefinedPermissionName")).ShouldBeFalse();
}
[Fact]

16
modules/permission-management/test/Volo.Abp.PermissionManagement.Domain.Tests/Volo/Abp/PermissionManagement/PermissionManager_Tests.cs

@ -72,12 +72,12 @@ public class PermissionManager_Tests : PermissionTestBase
}
[Fact]
public async Task Get_Should_Exception_When_Permission_Undefined()
public async Task Get_Should_Return_Not_Granted_When_Permission_Undefined()
{
await Assert.ThrowsAsync<AbpException>(async () => await _permissionManager.GetAsync(
"MyPermission1NotExist",
"Test",
"Test"));
var result = await _permissionManager.GetAsync("MyPermission1NotExist", "Test", "Test");
result.Name.ShouldBe("MyPermission1NotExist");
result.Providers.ShouldBeEmpty();
result.IsGranted.ShouldBeFalse();
}
[Fact]
@ -126,13 +126,13 @@ public class PermissionManager_Tests : PermissionTestBase
}
[Fact]
public async Task Set_Should_Exception_When_Permission_Undefined()
public async Task Set_Should_Silently_Ignore_When_Permission_Undefined()
{
await Assert.ThrowsAsync<AbpException>(async () => await _permissionManager.SetAsync(
await _permissionManager.SetAsync(
"MyPermission1NotExist",
"Test",
"Test",
true));
true);
}
[Fact]

Loading…
Cancel
Save