mirror of https://github.com/abpframework/abp.git
9 changed files with 493 additions and 2 deletions
@ -0,0 +1,90 @@ |
|||||
|
using System; |
||||
|
using System.Threading.Tasks; |
||||
|
using Shouldly; |
||||
|
using Volo.Abp.Authorization.Permissions; |
||||
|
using Xunit; |
||||
|
|
||||
|
namespace Volo.Abp.PermissionManagement; |
||||
|
|
||||
|
public class ResourcePermissionManagementProvider_Tests : PermissionTestBase |
||||
|
{ |
||||
|
private readonly IResourcePermissionManagementProvider _resourcePermissionManagementProvider; |
||||
|
private readonly IResourcePermissionGrantRepository _resourcePermissionGrantRepository; |
||||
|
|
||||
|
public ResourcePermissionManagementProvider_Tests() |
||||
|
{ |
||||
|
_resourcePermissionManagementProvider = GetRequiredService<TestResourcePermissionManagementProvider>(); |
||||
|
_resourcePermissionGrantRepository = GetRequiredService<IResourcePermissionGrantRepository>(); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task CheckAsync() |
||||
|
{ |
||||
|
await _resourcePermissionGrantRepository.InsertAsync( |
||||
|
new ResourcePermissionGrant( |
||||
|
Guid.NewGuid(), |
||||
|
"MyPermission1", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test" |
||||
|
) |
||||
|
); |
||||
|
|
||||
|
var permissionValueProviderGrantInfo = await _resourcePermissionManagementProvider.CheckAsync( |
||||
|
"MyPermission1", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test"); |
||||
|
|
||||
|
permissionValueProviderGrantInfo.IsGranted.ShouldBeTrue(); |
||||
|
permissionValueProviderGrantInfo.ProviderKey.ShouldBe("Test"); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Check_Should_Return_NonGranted_When_ProviderName_NotEquals_Name() |
||||
|
{ |
||||
|
var permissionValueProviderGrantInfo = await _resourcePermissionManagementProvider.CheckAsync( |
||||
|
"MyPermission1", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"TestNotExist", |
||||
|
"Test"); |
||||
|
|
||||
|
permissionValueProviderGrantInfo.IsGranted.ShouldBeFalse(); |
||||
|
permissionValueProviderGrantInfo.ProviderKey.ShouldBeNull(); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task SetAsync() |
||||
|
{ |
||||
|
await _resourcePermissionGrantRepository.InsertAsync( |
||||
|
new ResourcePermissionGrant( |
||||
|
Guid.NewGuid(), |
||||
|
"MyPermission1", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test" |
||||
|
) |
||||
|
); |
||||
|
(await _resourcePermissionGrantRepository.FindAsync("MyPermission1", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test")).ShouldNotBeNull(); |
||||
|
|
||||
|
await _resourcePermissionManagementProvider.SetAsync("MyPermission1", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
false); |
||||
|
|
||||
|
(await _resourcePermissionGrantRepository.FindAsync("MyPermission1", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test")).ShouldBeNull(); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,337 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
using Shouldly; |
||||
|
using Volo.Abp.Authorization.Permissions; |
||||
|
using Volo.Abp.Authorization.Permissions.Resources; |
||||
|
using Xunit; |
||||
|
|
||||
|
namespace Volo.Abp.PermissionManagement; |
||||
|
|
||||
|
public class ResourcePermissionManager_Tests : PermissionTestBase |
||||
|
{ |
||||
|
private readonly IResourcePermissionManager _resourcePermissionManager; |
||||
|
private readonly IResourcePermissionGrantRepository _resourcePermissionGrantRepository; |
||||
|
|
||||
|
public ResourcePermissionManager_Tests() |
||||
|
{ |
||||
|
_resourcePermissionManager = GetRequiredService<IResourcePermissionManager>(); |
||||
|
_resourcePermissionGrantRepository = GetRequiredService<IResourcePermissionGrantRepository>(); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task GetProviderKeyLookupServicesAsync() |
||||
|
{ |
||||
|
var permissionProviderKeyLookupServices = await _resourcePermissionManager.GetProviderKeyLookupServicesAsync(); |
||||
|
|
||||
|
permissionProviderKeyLookupServices.ShouldNotBeNull(); |
||||
|
permissionProviderKeyLookupServices.First().Name.ShouldBe("Test"); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task GetProviderKeyLookupServiceAsync() |
||||
|
{ |
||||
|
var testProviderKeyLookupService = await _resourcePermissionManager.GetProviderKeyLookupServiceAsync("Test"); |
||||
|
testProviderKeyLookupService.ShouldNotBeNull(); |
||||
|
testProviderKeyLookupService.Name.ShouldBe("Test"); |
||||
|
|
||||
|
var exception = await Assert.ThrowsAsync<AbpException>(async () => |
||||
|
{ |
||||
|
await _resourcePermissionManager.GetProviderKeyLookupServiceAsync("UndefinedProvider"); |
||||
|
}); |
||||
|
exception.Message.ShouldBe("Unknown resource permission provider key lookup service: UndefinedProvider"); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task GetAvailablePermissionsAsync() |
||||
|
{ |
||||
|
var availablePermissions = await _resourcePermissionManager.GetAvailablePermissionsAsync(TestEntityResource.ResourceName); |
||||
|
|
||||
|
availablePermissions.ShouldNotBeNull(); |
||||
|
availablePermissions.ShouldContain(p => p.Name == "MyResourcePermission1"); |
||||
|
availablePermissions.ShouldContain(p => p.Name == "MyResourcePermission2"); |
||||
|
availablePermissions.ShouldContain(p => p.Name == "MyResourcePermission3"); |
||||
|
availablePermissions.ShouldContain(p => p.Name == "MyResourcePermission4"); |
||||
|
availablePermissions.ShouldContain(p => p.Name == "MyResourcePermission6"); |
||||
|
availablePermissions.ShouldContain(p => p.Name == "MyResourcePermission7"); |
||||
|
|
||||
|
availablePermissions.ShouldNotContain(p => p.Name == "MyResourcePermission5"); |
||||
|
availablePermissions.ShouldNotContain(p => p.Name == "MyResourceDisabledPermission1"); |
||||
|
availablePermissions.ShouldNotContain(p => p.Name == "MyResourceDisabledPermission2"); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task GetAsync() |
||||
|
{ |
||||
|
await _resourcePermissionGrantRepository.InsertAsync(new ResourcePermissionGrant( |
||||
|
Guid.NewGuid(), |
||||
|
"MyResourcePermission1", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test") |
||||
|
); |
||||
|
|
||||
|
var grantedProviders = await _resourcePermissionManager.GetAsync( |
||||
|
"MyResourcePermission1", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test"); |
||||
|
|
||||
|
grantedProviders.ShouldNotBeNull(); |
||||
|
grantedProviders.IsGranted.ShouldBeTrue(); |
||||
|
grantedProviders.Name.ShouldBe("MyResourcePermission1"); |
||||
|
grantedProviders.Providers.ShouldContain(x => x.Key == "Test"); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Multiple_GetAsync() |
||||
|
{ |
||||
|
await _resourcePermissionGrantRepository.InsertAsync(new ResourcePermissionGrant( |
||||
|
Guid.NewGuid(), |
||||
|
"MyResourcePermission1", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test") |
||||
|
); |
||||
|
await _resourcePermissionGrantRepository.InsertAsync(new ResourcePermissionGrant( |
||||
|
Guid.NewGuid(), |
||||
|
"MyResourcePermission2", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test") |
||||
|
); |
||||
|
|
||||
|
var grantedProviders = await _resourcePermissionManager.GetAsync( |
||||
|
new[] { "MyResourcePermission1", "MyResourcePermission2" }, |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test"); |
||||
|
|
||||
|
grantedProviders.Result.Count.ShouldBe(2); |
||||
|
grantedProviders.Result.First().IsGranted.ShouldBeTrue(); |
||||
|
grantedProviders.Result.First().Name.ShouldBe("MyResourcePermission1"); |
||||
|
grantedProviders.Result.First().Providers.ShouldContain(x => x.Key == "Test"); |
||||
|
|
||||
|
grantedProviders.Result.Last().IsGranted.ShouldBeTrue(); |
||||
|
grantedProviders.Result.Last().Name.ShouldBe("MyResourcePermission2"); |
||||
|
grantedProviders.Result.Last().Providers.ShouldContain(x => x.Key == "Test"); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Get_Should_Return_Not_Granted_When_Permission_Undefined() |
||||
|
{ |
||||
|
var result = await _resourcePermissionManager.GetAsync( |
||||
|
"MyResourcePermission1NotExist", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1,"Test", "Test"); |
||||
|
result.Name.ShouldBe("MyResourcePermission1NotExist"); |
||||
|
result.Providers.ShouldBeEmpty(); |
||||
|
result.IsGranted.ShouldBeFalse(); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task GetAllAsync() |
||||
|
{ |
||||
|
await _resourcePermissionGrantRepository.InsertAsync(new ResourcePermissionGrant( |
||||
|
Guid.NewGuid(), |
||||
|
"MyResourcePermission1", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test") |
||||
|
); |
||||
|
|
||||
|
await _resourcePermissionGrantRepository.InsertAsync(new ResourcePermissionGrant( |
||||
|
Guid.NewGuid(), |
||||
|
"MyResourcePermission2", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test") |
||||
|
); |
||||
|
|
||||
|
var permissionWithGrantedProviders = await _resourcePermissionManager.GetAllAsync( |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test"); |
||||
|
|
||||
|
permissionWithGrantedProviders.ShouldNotBeNull(); |
||||
|
permissionWithGrantedProviders.ShouldContain(x => |
||||
|
x.IsGranted && x.Name == "MyResourcePermission1" && x.Providers.Any(p => p.Key == "Test")); |
||||
|
permissionWithGrantedProviders.ShouldContain(x => |
||||
|
x.IsGranted && x.Name == "MyResourcePermission2" && x.Providers.Any(p => p.Key == "Test")); |
||||
|
|
||||
|
|
||||
|
permissionWithGrantedProviders = await _resourcePermissionManager.GetAllAsync( |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1); |
||||
|
|
||||
|
permissionWithGrantedProviders.ShouldNotBeNull(); |
||||
|
permissionWithGrantedProviders.ShouldContain(x => x.IsGranted && x.Name == "MyResourcePermission1" && x.Providers.Any(p => p.Key == "Test")); |
||||
|
permissionWithGrantedProviders.ShouldContain(x => x.IsGranted && x.Name == "MyResourcePermission2" && x.Providers.Any(p => p.Key == "Test")); |
||||
|
|
||||
|
permissionWithGrantedProviders.ShouldNotContain(x => x.Name == "MyResourcePermission5"); // Not available permission
|
||||
|
|
||||
|
permissionWithGrantedProviders.ShouldContain(x => !x.IsGranted && x.Name == "MyResourcePermission3" && x.Providers.Count == 0); |
||||
|
permissionWithGrantedProviders.ShouldContain(x => !x.IsGranted && x.Name == "MyResourcePermission4" && x.Providers.Count == 0); |
||||
|
permissionWithGrantedProviders.ShouldContain(x => !x.IsGranted && x.Name == "MyResourcePermission6" && x.Providers.Count == 0); |
||||
|
permissionWithGrantedProviders.ShouldContain(x => !x.IsGranted && x.Name == "MyResourcePermission7" && x.Providers.Count == 0); |
||||
|
permissionWithGrantedProviders.ShouldContain(x => !x.IsGranted && x.Name == "MyResourcePermission8" && x.Providers.Count == 0); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task GetAllGroupAsync() |
||||
|
{ |
||||
|
var group = await _resourcePermissionManager.GetAllGroupAsync( |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1); |
||||
|
|
||||
|
group.ShouldNotBeNull(); |
||||
|
group.Count.ShouldBe(1); |
||||
|
group.First().ProviderName.ShouldBe(UserResourcePermissionValueProvider.ProviderName); |
||||
|
group.First().ProviderKey.ShouldBe(PermissionTestDataBuilder.User1Id.ToString()); |
||||
|
group.First().Permissions.Count.ShouldBe(1); |
||||
|
group.First().Permissions.ShouldContain(x => x == "MyResourcePermission1"); |
||||
|
|
||||
|
group = await _resourcePermissionManager.GetAllGroupAsync( |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey3); |
||||
|
|
||||
|
group.ShouldNotBeNull(); |
||||
|
group.Count.ShouldBe(1); |
||||
|
group.First().ProviderName.ShouldBe(UserResourcePermissionValueProvider.ProviderName); |
||||
|
group.First().ProviderKey.ShouldBe(PermissionTestDataBuilder.User1Id.ToString()); |
||||
|
group.First().Permissions.Count.ShouldBe(2); |
||||
|
group.First().Permissions.ShouldContain(x => x == "MyResourcePermission3"); |
||||
|
group.First().Permissions.ShouldContain(x => x == "MyResourcePermission6"); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Set_Should_Silently_Ignore_When_Permission_Undefined() |
||||
|
{ |
||||
|
await _resourcePermissionManager.SetAsync( |
||||
|
"MyResourcePermission1NotExist", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test", |
||||
|
true); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Set_Should_Throw_Exception_If_Provider_Not_Found() |
||||
|
{ |
||||
|
var exception = await Assert.ThrowsAsync<AbpException>(async () => |
||||
|
{ |
||||
|
await _resourcePermissionManager.SetAsync( |
||||
|
"MyResourcePermission1", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"UndefinedProvider", |
||||
|
"Test", |
||||
|
true); |
||||
|
}); |
||||
|
|
||||
|
exception.Message.ShouldBe("Unknown resource permission management provider: UndefinedProvider"); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task UpdateProviderKey() |
||||
|
{ |
||||
|
await _resourcePermissionGrantRepository.InsertAsync(new ResourcePermissionGrant( |
||||
|
Guid.NewGuid(), |
||||
|
"MyResourcePermission1", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test") |
||||
|
); |
||||
|
var permissionGrant = await _resourcePermissionGrantRepository.FindAsync( |
||||
|
"MyResourcePermission1", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test"); |
||||
|
permissionGrant.ProviderKey.ShouldBe("Test"); |
||||
|
|
||||
|
await _resourcePermissionManager.UpdateProviderKeyAsync(permissionGrant, "NewProviderKey"); |
||||
|
(await _resourcePermissionGrantRepository.FindAsync( |
||||
|
"MyResourcePermission1", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"NewProviderKey")).ShouldNotBeNull(); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task DeleteAsync() |
||||
|
{ |
||||
|
await _resourcePermissionGrantRepository.InsertAsync(new ResourcePermissionGrant( |
||||
|
Guid.NewGuid(), |
||||
|
"MyResourcePermission1", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test") |
||||
|
); |
||||
|
var permissionGrant = await _resourcePermissionGrantRepository.FindAsync("MyResourcePermission1", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test"); |
||||
|
permissionGrant.ProviderKey.ShouldBe("Test"); |
||||
|
|
||||
|
await _resourcePermissionManager.DeleteAsync( |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test"); |
||||
|
|
||||
|
(await _resourcePermissionGrantRepository.FindAsync( |
||||
|
"MyResourcePermission1", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test")).ShouldBeNull(); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task DeleteByProviderAsync() |
||||
|
{ |
||||
|
await _resourcePermissionGrantRepository.InsertAsync(new ResourcePermissionGrant( |
||||
|
Guid.NewGuid(), |
||||
|
"MyResourcePermission1", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test") |
||||
|
); |
||||
|
|
||||
|
var permissionGrant = await _resourcePermissionGrantRepository.FindAsync("MyResourcePermission1", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test"); |
||||
|
|
||||
|
permissionGrant.ProviderKey.ShouldBe("Test"); |
||||
|
|
||||
|
await _resourcePermissionManager.DeleteAsync( |
||||
|
"Test", |
||||
|
"Test"); |
||||
|
|
||||
|
(await _resourcePermissionGrantRepository.FindAsync( |
||||
|
"MyResourcePermission1", |
||||
|
TestEntityResource.ResourceName, |
||||
|
TestEntityResource.ResourceKey1, |
||||
|
"Test", |
||||
|
"Test")).ShouldBeNull(); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,24 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
using Volo.Abp.Guids; |
||||
|
using Volo.Abp.MultiTenancy; |
||||
|
|
||||
|
namespace Volo.Abp.PermissionManagement; |
||||
|
|
||||
|
public class TestResourcePermissionManagementProvider : ResourcePermissionManagementProvider |
||||
|
{ |
||||
|
public override string Name => "Test"; |
||||
|
|
||||
|
public TestResourcePermissionManagementProvider( |
||||
|
IResourcePermissionGrantRepository resourcePermissionGrantRepository, |
||||
|
IGuidGenerator guidGenerator, |
||||
|
ICurrentTenant currentTenant) |
||||
|
: base( |
||||
|
resourcePermissionGrantRepository, |
||||
|
guidGenerator, |
||||
|
currentTenant) |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,24 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
using System.Threading; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
|
using Volo.Abp.Localization; |
||||
|
|
||||
|
namespace Volo.Abp.PermissionManagement; |
||||
|
|
||||
|
public class TestResourcePermissionProviderKeyLookupService : IResourcePermissionProviderKeyLookupService, ITransientDependency |
||||
|
{ |
||||
|
public string Name => "Test"; |
||||
|
|
||||
|
public ILocalizableString DisplayName => new LocalizableString("Test", "TestResource"); |
||||
|
|
||||
|
public Task<List<ResourcePermissionProviderKeyInfo>> SearchAsync(string filter = null, CancellationToken cancellationToken = default) |
||||
|
{ |
||||
|
throw new System.NotImplementedException(); |
||||
|
} |
||||
|
|
||||
|
public Task<List<ResourcePermissionProviderKeyInfo>> SearchAsync(string[] keys, CancellationToken cancellationToken = default) |
||||
|
{ |
||||
|
throw new System.NotImplementedException(); |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue