diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStoreInMemoryCache.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStoreInMemoryCache.cs index abd287ec8b..902b0431d2 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStoreInMemoryCache.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStoreInMemoryCache.cs @@ -58,25 +58,7 @@ public class DynamicPermissionDefinitionStoreInMemoryCache : resourcePermissionRecord.MultiTenancySide, resourcePermissionRecord.IsEnabled); - if (!resourcePermissionRecord.Providers.IsNullOrWhiteSpace()) - { - resourcePermission.Providers.AddRange(resourcePermissionRecord.Providers.Split(',')); - } - - if (!resourcePermissionRecord.StateCheckers.IsNullOrWhiteSpace()) - { - var checkers = StateCheckerSerializer - .DeserializeArray( - resourcePermissionRecord.StateCheckers, - resourcePermission - ); - resourcePermission.StateCheckers.AddRange(checkers); - } - - foreach (var property in resourcePermissionRecord.ExtraProperties) - { - resourcePermission[property.Key] = property.Value; - } + ApplyPermissionProperties(resourcePermission, resourcePermissionRecord); ResourcePermissionDefinitions.Add(resourcePermission); } @@ -146,6 +128,16 @@ public class DynamicPermissionDefinitionStoreInMemoryCache : PermissionDefinitions[permission.Name] = permission; + ApplyPermissionProperties(permission, permissionRecord); + + foreach (var subPermission in allPermissionRecords.Where(p => p.ParentName == permissionRecord.Name)) + { + AddPermissionRecursively(permission, subPermission, allPermissionRecords); + } + } + + private void ApplyPermissionProperties(PermissionDefinition permission, PermissionDefinitionRecord permissionRecord) + { if (!permissionRecord.Providers.IsNullOrWhiteSpace()) { permission.Providers.AddRange(permissionRecord.Providers.Split(',')); @@ -165,10 +157,5 @@ public class DynamicPermissionDefinitionStoreInMemoryCache : { permission[property.Key] = property.Value; } - - foreach (var subPermission in allPermissionRecords.Where(p => p.ParentName == permissionRecord.Name)) - { - AddPermissionRecursively(permission, subPermission, allPermissionRecords); - } } } diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Domain.Tests/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStoreInMemoryCache_Tests.cs b/modules/permission-management/test/Volo.Abp.PermissionManagement.Domain.Tests/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStoreInMemoryCache_Tests.cs index 7594a9da40..f603bbe30f 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.Domain.Tests/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStoreInMemoryCache_Tests.cs +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Domain.Tests/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStoreInMemoryCache_Tests.cs @@ -141,6 +141,34 @@ public class DynamicPermissionDefinitionStoreInMemoryCache_Tests : PermissionTes _cache.GetResourcePermissionOrNull("TestResource", "RegularPerm1").ShouldBeNull(); } + [Fact] + public async Task FillAsync_Should_Populate_ResourcePermission_With_StateCheckers() + { + // Arrange + var permissionGroupRecords = new List(); + var permissionRecords = new List + { + 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() {