mirror of https://github.com/abpframework/abp.git
committed by
GitHub
6 changed files with 268 additions and 23 deletions
@ -0,0 +1,214 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
using Shouldly; |
|||
using Volo.Abp.MultiTenancy; |
|||
using Xunit; |
|||
|
|||
namespace Volo.Abp.PermissionManagement; |
|||
|
|||
public class DynamicPermissionDefinitionStoreInMemoryCache_Tests : PermissionTestBase |
|||
{ |
|||
private readonly IDynamicPermissionDefinitionStoreInMemoryCache _cache; |
|||
|
|||
public DynamicPermissionDefinitionStoreInMemoryCache_Tests() |
|||
{ |
|||
_cache = GetRequiredService<IDynamicPermissionDefinitionStoreInMemoryCache>(); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task FillAsync_Should_Populate_ResourcePermissionDefinitions() |
|||
{ |
|||
// Arrange
|
|||
var permissionGroupRecords = new List<PermissionGroupDefinitionRecord>(); |
|||
var permissionRecords = new List<PermissionDefinitionRecord> |
|||
{ |
|||
new PermissionDefinitionRecord( |
|||
Guid.NewGuid(), |
|||
groupName: null, |
|||
name: "TestResourcePerm1", |
|||
resourceName: "TestResource", |
|||
managementPermissionName: "TestManagementPerm", |
|||
parentName: null, |
|||
displayName: "F:Test Resource Permission 1", |
|||
isEnabled: true, |
|||
multiTenancySide: MultiTenancySides.Both, |
|||
providers: "R,U", |
|||
stateCheckers: null |
|||
) |
|||
}; |
|||
|
|||
// Act
|
|||
await _cache.FillAsync(permissionGroupRecords, permissionRecords); |
|||
|
|||
// Assert
|
|||
var resourcePermissions = _cache.GetResourcePermissions(); |
|||
resourcePermissions.Count.ShouldBe(1); |
|||
|
|||
var resourcePermission = _cache.GetResourcePermissionOrNull("TestResource", "TestResourcePerm1"); |
|||
resourcePermission.ShouldNotBeNull(); |
|||
resourcePermission.Name.ShouldBe("TestResourcePerm1"); |
|||
resourcePermission.ResourceName.ShouldBe("TestResource"); |
|||
resourcePermission.ManagementPermissionName.ShouldBe("TestManagementPerm"); |
|||
resourcePermission.IsEnabled.ShouldBeTrue(); |
|||
resourcePermission.MultiTenancySide.ShouldBe(MultiTenancySides.Both); |
|||
resourcePermission.Providers.Count.ShouldBe(2); |
|||
resourcePermission.Providers.ShouldContain("R"); |
|||
resourcePermission.Providers.ShouldContain("U"); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task FillAsync_Should_Populate_ResourcePermission_With_ExtraProperties() |
|||
{ |
|||
// Arrange
|
|||
var permissionGroupRecords = new List<PermissionGroupDefinitionRecord>(); |
|||
var record = new PermissionDefinitionRecord( |
|||
Guid.NewGuid(), |
|||
groupName: null, |
|||
name: "TestResourcePerm2", |
|||
resourceName: "TestResource", |
|||
managementPermissionName: "TestManagementPerm", |
|||
parentName: null, |
|||
displayName: "F:Test Resource Permission 2" |
|||
); |
|||
record.ExtraProperties["CustomProp1"] = "CustomValue1"; |
|||
|
|||
var permissionRecords = new List<PermissionDefinitionRecord> { record }; |
|||
|
|||
// Act
|
|||
await _cache.FillAsync(permissionGroupRecords, permissionRecords); |
|||
|
|||
// Assert
|
|||
var resourcePermission = _cache.GetResourcePermissionOrNull("TestResource", "TestResourcePerm2"); |
|||
resourcePermission.ShouldNotBeNull(); |
|||
resourcePermission["CustomProp1"].ShouldBe("CustomValue1"); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task FillAsync_Should_Not_Mix_Resource_And_Regular_Permissions() |
|||
{ |
|||
// Arrange
|
|||
var permissionGroupRecords = new List<PermissionGroupDefinitionRecord> |
|||
{ |
|||
new PermissionGroupDefinitionRecord( |
|||
Guid.NewGuid(), |
|||
name: "TestGroup", |
|||
displayName: "F:Test Group" |
|||
) |
|||
}; |
|||
|
|||
var permissionRecords = new List<PermissionDefinitionRecord> |
|||
{ |
|||
// Regular permission
|
|||
new PermissionDefinitionRecord( |
|||
Guid.NewGuid(), |
|||
groupName: "TestGroup", |
|||
name: "RegularPerm1", |
|||
resourceName: null, |
|||
managementPermissionName: null, |
|||
parentName: null, |
|||
displayName: "F:Regular Permission 1" |
|||
), |
|||
// Resource permission
|
|||
new PermissionDefinitionRecord( |
|||
Guid.NewGuid(), |
|||
groupName: null, |
|||
name: "ResourcePerm1", |
|||
resourceName: "TestResource", |
|||
managementPermissionName: "ManagementPerm", |
|||
parentName: null, |
|||
displayName: "F:Resource Permission 1" |
|||
) |
|||
}; |
|||
|
|||
// Act
|
|||
await _cache.FillAsync(permissionGroupRecords, permissionRecords); |
|||
|
|||
// Assert
|
|||
var regularPermissions = _cache.GetPermissions(); |
|||
regularPermissions.Count.ShouldBe(1); |
|||
regularPermissions.First().Name.ShouldBe("RegularPerm1"); |
|||
|
|||
var resourcePermissions = _cache.GetResourcePermissions(); |
|||
resourcePermissions.Count.ShouldBe(1); |
|||
resourcePermissions.First().Name.ShouldBe("ResourcePerm1"); |
|||
|
|||
_cache.GetPermissionOrNull("RegularPerm1").ShouldNotBeNull(); |
|||
_cache.GetPermissionOrNull("ResourcePerm1").ShouldBeNull(); |
|||
|
|||
_cache.GetResourcePermissionOrNull("TestResource", "ResourcePerm1").ShouldNotBeNull(); |
|||
_cache.GetResourcePermissionOrNull("TestResource", "RegularPerm1").ShouldBeNull(); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task FillAsync_Should_Populate_ResourcePermission_With_StateCheckers() |
|||
{ |
|||
// Arrange
|
|||
var permissionGroupRecords = new List<PermissionGroupDefinitionRecord>(); |
|||
var permissionRecords = new List<PermissionDefinitionRecord> |
|||
{ |
|||
new PermissionDefinitionRecord( |
|||
Guid.NewGuid(), |
|||
groupName: null, |
|||
name: "TestResourcePerm3", |
|||
resourceName: "TestResource", |
|||
managementPermissionName: "TestManagementPerm", |
|||
parentName: null, |
|||
displayName: "F:Test Resource Permission 3", |
|||
stateCheckers: "[{\"T\":\"A\"}]" |
|||
) |
|||
}; |
|||
|
|||
// Act
|
|||
await _cache.FillAsync(permissionGroupRecords, permissionRecords); |
|||
|
|||
// Assert
|
|||
var resourcePermission = _cache.GetResourcePermissionOrNull("TestResource", "TestResourcePerm3"); |
|||
resourcePermission.ShouldNotBeNull(); |
|||
resourcePermission.StateCheckers.Count.ShouldBe(1); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task FillAsync_Should_Clear_Previous_ResourcePermissions() |
|||
{ |
|||
// Arrange - first fill
|
|||
var permissionRecords1 = new List<PermissionDefinitionRecord> |
|||
{ |
|||
new PermissionDefinitionRecord( |
|||
Guid.NewGuid(), |
|||
groupName: null, |
|||
name: "OldResourcePerm", |
|||
resourceName: "TestResource", |
|||
managementPermissionName: "ManagementPerm", |
|||
parentName: null, |
|||
displayName: "F:Old Resource Permission" |
|||
) |
|||
}; |
|||
await _cache.FillAsync(new List<PermissionGroupDefinitionRecord>(), permissionRecords1); |
|||
_cache.GetResourcePermissions().Count.ShouldBe(1); |
|||
|
|||
// Arrange - second fill with different data
|
|||
var permissionRecords2 = new List<PermissionDefinitionRecord> |
|||
{ |
|||
new PermissionDefinitionRecord( |
|||
Guid.NewGuid(), |
|||
groupName: null, |
|||
name: "NewResourcePerm", |
|||
resourceName: "TestResource", |
|||
managementPermissionName: "ManagementPerm", |
|||
parentName: null, |
|||
displayName: "F:New Resource Permission" |
|||
) |
|||
}; |
|||
|
|||
// Act
|
|||
await _cache.FillAsync(new List<PermissionGroupDefinitionRecord>(), permissionRecords2); |
|||
|
|||
// Assert
|
|||
var resourcePermissions = _cache.GetResourcePermissions(); |
|||
resourcePermissions.Count.ShouldBe(1); |
|||
resourcePermissions.First().Name.ShouldBe("NewResourcePerm"); |
|||
_cache.GetResourcePermissionOrNull("TestResource", "OldResourcePerm").ShouldBeNull(); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue