|
| 1 | +using System; |
| 2 | +using System.Collections.Generic; |
| 3 | +using System.Linq; |
| 4 | +using System.Threading.Tasks; |
| 5 | +using Shouldly; |
| 6 | +using Volo.Abp.MultiTenancy; |
| 7 | +using Xunit; |
| 8 | + |
| 9 | +namespace Volo.Abp.PermissionManagement; |
| 10 | + |
| 11 | +public class DynamicPermissionDefinitionStoreInMemoryCache_Tests : PermissionTestBase |
| 12 | +{ |
| 13 | + private readonly IDynamicPermissionDefinitionStoreInMemoryCache _cache; |
| 14 | + |
| 15 | + public DynamicPermissionDefinitionStoreInMemoryCache_Tests() |
| 16 | + { |
| 17 | + _cache = GetRequiredService<IDynamicPermissionDefinitionStoreInMemoryCache>(); |
| 18 | + } |
| 19 | + |
| 20 | + [Fact] |
| 21 | + public async Task FillAsync_Should_Populate_ResourcePermissionDefinitions() |
| 22 | + { |
| 23 | + // Arrange |
| 24 | + var permissionGroupRecords = new List<PermissionGroupDefinitionRecord>(); |
| 25 | + var permissionRecords = new List<PermissionDefinitionRecord> |
| 26 | + { |
| 27 | + new PermissionDefinitionRecord( |
| 28 | + Guid.NewGuid(), |
| 29 | + groupName: null, |
| 30 | + name: "TestResourcePerm1", |
| 31 | + resourceName: "TestResource", |
| 32 | + managementPermissionName: "TestManagementPerm", |
| 33 | + parentName: null, |
| 34 | + displayName: "F:Test Resource Permission 1", |
| 35 | + isEnabled: true, |
| 36 | + multiTenancySide: MultiTenancySides.Both, |
| 37 | + providers: "R,U", |
| 38 | + stateCheckers: null |
| 39 | + ) |
| 40 | + }; |
| 41 | + |
| 42 | + // Act |
| 43 | + await _cache.FillAsync(permissionGroupRecords, permissionRecords); |
| 44 | + |
| 45 | + // Assert |
| 46 | + var resourcePermissions = _cache.GetResourcePermissions(); |
| 47 | + resourcePermissions.Count.ShouldBe(1); |
| 48 | + |
| 49 | + var resourcePermission = _cache.GetResourcePermissionOrNull("TestResource", "TestResourcePerm1"); |
| 50 | + resourcePermission.ShouldNotBeNull(); |
| 51 | + resourcePermission.Name.ShouldBe("TestResourcePerm1"); |
| 52 | + resourcePermission.ResourceName.ShouldBe("TestResource"); |
| 53 | + resourcePermission.ManagementPermissionName.ShouldBe("TestManagementPerm"); |
| 54 | + resourcePermission.IsEnabled.ShouldBeTrue(); |
| 55 | + resourcePermission.MultiTenancySide.ShouldBe(MultiTenancySides.Both); |
| 56 | + resourcePermission.Providers.Count.ShouldBe(2); |
| 57 | + resourcePermission.Providers.ShouldContain("R"); |
| 58 | + resourcePermission.Providers.ShouldContain("U"); |
| 59 | + } |
| 60 | + |
| 61 | + [Fact] |
| 62 | + public async Task FillAsync_Should_Populate_ResourcePermission_With_ExtraProperties() |
| 63 | + { |
| 64 | + // Arrange |
| 65 | + var permissionGroupRecords = new List<PermissionGroupDefinitionRecord>(); |
| 66 | + var record = new PermissionDefinitionRecord( |
| 67 | + Guid.NewGuid(), |
| 68 | + groupName: null, |
| 69 | + name: "TestResourcePerm2", |
| 70 | + resourceName: "TestResource", |
| 71 | + managementPermissionName: "TestManagementPerm", |
| 72 | + parentName: null, |
| 73 | + displayName: "F:Test Resource Permission 2" |
| 74 | + ); |
| 75 | + record.ExtraProperties["CustomProp1"] = "CustomValue1"; |
| 76 | + |
| 77 | + var permissionRecords = new List<PermissionDefinitionRecord> { record }; |
| 78 | + |
| 79 | + // Act |
| 80 | + await _cache.FillAsync(permissionGroupRecords, permissionRecords); |
| 81 | + |
| 82 | + // Assert |
| 83 | + var resourcePermission = _cache.GetResourcePermissionOrNull("TestResource", "TestResourcePerm2"); |
| 84 | + resourcePermission.ShouldNotBeNull(); |
| 85 | + resourcePermission["CustomProp1"].ShouldBe("CustomValue1"); |
| 86 | + } |
| 87 | + |
| 88 | + [Fact] |
| 89 | + public async Task FillAsync_Should_Not_Mix_Resource_And_Regular_Permissions() |
| 90 | + { |
| 91 | + // Arrange |
| 92 | + var permissionGroupRecords = new List<PermissionGroupDefinitionRecord> |
| 93 | + { |
| 94 | + new PermissionGroupDefinitionRecord( |
| 95 | + Guid.NewGuid(), |
| 96 | + name: "TestGroup", |
| 97 | + displayName: "F:Test Group" |
| 98 | + ) |
| 99 | + }; |
| 100 | + |
| 101 | + var permissionRecords = new List<PermissionDefinitionRecord> |
| 102 | + { |
| 103 | + // Regular permission |
| 104 | + new PermissionDefinitionRecord( |
| 105 | + Guid.NewGuid(), |
| 106 | + groupName: "TestGroup", |
| 107 | + name: "RegularPerm1", |
| 108 | + resourceName: null, |
| 109 | + managementPermissionName: null, |
| 110 | + parentName: null, |
| 111 | + displayName: "F:Regular Permission 1" |
| 112 | + ), |
| 113 | + // Resource permission |
| 114 | + new PermissionDefinitionRecord( |
| 115 | + Guid.NewGuid(), |
| 116 | + groupName: null, |
| 117 | + name: "ResourcePerm1", |
| 118 | + resourceName: "TestResource", |
| 119 | + managementPermissionName: "ManagementPerm", |
| 120 | + parentName: null, |
| 121 | + displayName: "F:Resource Permission 1" |
| 122 | + ) |
| 123 | + }; |
| 124 | + |
| 125 | + // Act |
| 126 | + await _cache.FillAsync(permissionGroupRecords, permissionRecords); |
| 127 | + |
| 128 | + // Assert |
| 129 | + var regularPermissions = _cache.GetPermissions(); |
| 130 | + regularPermissions.Count.ShouldBe(1); |
| 131 | + regularPermissions.First().Name.ShouldBe("RegularPerm1"); |
| 132 | + |
| 133 | + var resourcePermissions = _cache.GetResourcePermissions(); |
| 134 | + resourcePermissions.Count.ShouldBe(1); |
| 135 | + resourcePermissions.First().Name.ShouldBe("ResourcePerm1"); |
| 136 | + |
| 137 | + _cache.GetPermissionOrNull("RegularPerm1").ShouldNotBeNull(); |
| 138 | + _cache.GetPermissionOrNull("ResourcePerm1").ShouldBeNull(); |
| 139 | + |
| 140 | + _cache.GetResourcePermissionOrNull("TestResource", "ResourcePerm1").ShouldNotBeNull(); |
| 141 | + _cache.GetResourcePermissionOrNull("TestResource", "RegularPerm1").ShouldBeNull(); |
| 142 | + } |
| 143 | + |
| 144 | + [Fact] |
| 145 | + public async Task FillAsync_Should_Populate_ResourcePermission_With_StateCheckers() |
| 146 | + { |
| 147 | + // Arrange |
| 148 | + var permissionGroupRecords = new List<PermissionGroupDefinitionRecord>(); |
| 149 | + var permissionRecords = new List<PermissionDefinitionRecord> |
| 150 | + { |
| 151 | + new PermissionDefinitionRecord( |
| 152 | + Guid.NewGuid(), |
| 153 | + groupName: null, |
| 154 | + name: "TestResourcePerm3", |
| 155 | + resourceName: "TestResource", |
| 156 | + managementPermissionName: "TestManagementPerm", |
| 157 | + parentName: null, |
| 158 | + displayName: "F:Test Resource Permission 3", |
| 159 | + stateCheckers: "[{\"T\":\"A\"}]" |
| 160 | + ) |
| 161 | + }; |
| 162 | + |
| 163 | + // Act |
| 164 | + await _cache.FillAsync(permissionGroupRecords, permissionRecords); |
| 165 | + |
| 166 | + // Assert |
| 167 | + var resourcePermission = _cache.GetResourcePermissionOrNull("TestResource", "TestResourcePerm3"); |
| 168 | + resourcePermission.ShouldNotBeNull(); |
| 169 | + resourcePermission.StateCheckers.Count.ShouldBe(1); |
| 170 | + } |
| 171 | + |
| 172 | + [Fact] |
| 173 | + public async Task FillAsync_Should_Clear_Previous_ResourcePermissions() |
| 174 | + { |
| 175 | + // Arrange - first fill |
| 176 | + var permissionRecords1 = new List<PermissionDefinitionRecord> |
| 177 | + { |
| 178 | + new PermissionDefinitionRecord( |
| 179 | + Guid.NewGuid(), |
| 180 | + groupName: null, |
| 181 | + name: "OldResourcePerm", |
| 182 | + resourceName: "TestResource", |
| 183 | + managementPermissionName: "ManagementPerm", |
| 184 | + parentName: null, |
| 185 | + displayName: "F:Old Resource Permission" |
| 186 | + ) |
| 187 | + }; |
| 188 | + await _cache.FillAsync(new List<PermissionGroupDefinitionRecord>(), permissionRecords1); |
| 189 | + _cache.GetResourcePermissions().Count.ShouldBe(1); |
| 190 | + |
| 191 | + // Arrange - second fill with different data |
| 192 | + var permissionRecords2 = new List<PermissionDefinitionRecord> |
| 193 | + { |
| 194 | + new PermissionDefinitionRecord( |
| 195 | + Guid.NewGuid(), |
| 196 | + groupName: null, |
| 197 | + name: "NewResourcePerm", |
| 198 | + resourceName: "TestResource", |
| 199 | + managementPermissionName: "ManagementPerm", |
| 200 | + parentName: null, |
| 201 | + displayName: "F:New Resource Permission" |
| 202 | + ) |
| 203 | + }; |
| 204 | + |
| 205 | + // Act |
| 206 | + await _cache.FillAsync(new List<PermissionGroupDefinitionRecord>(), permissionRecords2); |
| 207 | + |
| 208 | + // Assert |
| 209 | + var resourcePermissions = _cache.GetResourcePermissions(); |
| 210 | + resourcePermissions.Count.ShouldBe(1); |
| 211 | + resourcePermissions.First().Name.ShouldBe("NewResourcePerm"); |
| 212 | + _cache.GetResourcePermissionOrNull("TestResource", "OldResourcePerm").ShouldBeNull(); |
| 213 | + } |
| 214 | +} |
0 commit comments