From da995d427c22052210b0022cb38f7fb70011ad16 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 20 Nov 2025 17:06:04 +0800 Subject: [PATCH] Add resource permission checker tests and update permission definitions --- .../ResourcePermissionChecker_Tests.cs | 58 +++++++++++++++++++ ...estResourcePermissionDefinitionProvider.cs | 18 +++--- .../Resources/FakeResourcePermissionStore.cs | 16 ++++- .../Resources/TestEntityResource.cs | 10 ++++ .../TestResourcePermissionValueProvider1.cs | 8 ++- .../TestResourcePermissionValueProvider2.cs | 8 ++- 6 files changed, 103 insertions(+), 15 deletions(-) create mode 100644 framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/ResourcePermissionChecker_Tests.cs diff --git a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/ResourcePermissionChecker_Tests.cs b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/ResourcePermissionChecker_Tests.cs new file mode 100644 index 0000000000..37a624cd04 --- /dev/null +++ b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/ResourcePermissionChecker_Tests.cs @@ -0,0 +1,58 @@ +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Authorization.Permissions.Resources; +using Volo.Abp.Authorization.TestServices.Resources; +using Xunit; + +namespace Volo.Abp.Authorization; + +public class ResourcePermissionChecker_Tests: AuthorizationTestBase +{ + private readonly IResourcePermissionChecker _resourcePermissionChecker; + + public ResourcePermissionChecker_Tests() + { + _resourcePermissionChecker = GetRequiredService(); + } + + [Fact] + public async Task IsGrantedAsync() + { + (await _resourcePermissionChecker.IsGrantedAsync("MyResourcePermission5", TestEntityResource.ResourceName, TestEntityResource.ResourceKey5)).ShouldBe(true); + (await _resourcePermissionChecker.IsGrantedAsync("UndefinedResourcePermission", TestEntityResource.ResourceName, TestEntityResource.ResourceKey5)).ShouldBe(false); + } + + [Fact] + public async Task IsGranted_Multiple_Result_Async() + { + var result = await _resourcePermissionChecker.IsGrantedAsync(new [] + { + "MyResourcePermission1", + "MyResourcePermission2", + "UndefinedPermission", + "MyResourcePermission3", + "MyResourcePermission4", + "MyResourcePermission5" + }, TestEntityResource.ResourceName, TestEntityResource.ResourceKey5); + + result.Result["MyResourcePermission1"].ShouldBe(PermissionGrantResult.Undefined); + result.Result["MyResourcePermission2"].ShouldBe(PermissionGrantResult.Prohibited); + result.Result["UndefinedPermission"].ShouldBe(PermissionGrantResult.Prohibited); + result.Result["MyResourcePermission3"].ShouldBe(PermissionGrantResult.Granted); + result.Result["MyResourcePermission4"].ShouldBe(PermissionGrantResult.Prohibited); + result.Result["MyResourcePermission5"].ShouldBe(PermissionGrantResult.Granted); + + result = await _resourcePermissionChecker.IsGrantedAsync(new [] + { + "MyResourcePermission6", + }, TestEntityResource.ResourceName, TestEntityResource.ResourceKey6); + result.Result["MyResourcePermission6"].ShouldBe(PermissionGrantResult.Granted); + + result = await _resourcePermissionChecker.IsGrantedAsync(new [] + { + "MyResourcePermission7", + }, TestEntityResource.ResourceName, TestEntityResource.ResourceKey7); + result.Result["MyResourcePermission7"].ShouldBe(PermissionGrantResult.Granted); + } +} diff --git a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/AuthorizationTestResourcePermissionDefinitionProvider.cs b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/AuthorizationTestResourcePermissionDefinitionProvider.cs index 3100ff6952..567963f4da 100644 --- a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/AuthorizationTestResourcePermissionDefinitionProvider.cs +++ b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/AuthorizationTestResourcePermissionDefinitionProvider.cs @@ -7,17 +7,17 @@ public class AuthorizationTestResourcePermissionDefinitionProvider : PermissionD { public override void Define(IPermissionDefinitionContext context) { - var permission1 = context.AddResourcePermission("MyResourcePermissions1", resourceName: typeof(TestEntityResource).FullName!); + var permission1 = context.AddResourcePermission("MyResourcePermission1", resourceName: TestEntityResource.ResourceName); + permission1.StateCheckers.Add(new TestRequireEditionPermissionSimpleStateChecker());; permission1[PermissionDefinitionContext.KnownPropertyNames.CurrentProviderName].ShouldBe(typeof(AuthorizationTestResourcePermissionDefinitionProvider).FullName); - context.AddResourcePermission("MyResourcePermissions1", resourceName: typeof(TestEntityResource).FullName!).StateCheckers.Add(new TestRequireEditionPermissionSimpleStateChecker()); - context.AddResourcePermission("MyResourcePermissions2", resourceName: typeof(TestEntityResource).FullName!); - context.AddResourcePermission("MyResourcePermissions3", resourceName: typeof(TestEntityResource).FullName!); - context.AddResourcePermission("MyResourcePermissions4", resourceName: typeof(TestEntityResource).FullName!); - context.AddResourcePermission("MyResourcePermissions5", resourceName: typeof(TestEntityResource).FullName!); - context.AddResourcePermission("MyResourcePermissions6", resourceName: typeof(TestEntityResource).FullName!).WithProviders(nameof(TestPermissionValueProvider1)); - context.AddResourcePermission("MyResourcePermissions7", resourceName: typeof(TestEntityResource).FullName!).WithProviders(nameof(TestPermissionValueProvider2)); + context.AddResourcePermission("MyResourcePermission2", resourceName: typeof(TestEntityResource).FullName!); + context.AddResourcePermission("MyResourcePermission3", resourceName: typeof(TestEntityResource).FullName!); + context.AddResourcePermission("MyResourcePermission4", resourceName: typeof(TestEntityResource).FullName!); + context.AddResourcePermission("MyResourcePermission5", resourceName: typeof(TestEntityResource).FullName!); + context.AddResourcePermission("MyResourcePermission6", resourceName: typeof(TestEntityResource).FullName!).WithProviders(nameof(TestResourcePermissionValueProvider1)); + context.AddResourcePermission("MyResourcePermission7", resourceName: typeof(TestEntityResource).FullName!).WithProviders(nameof(TestResourcePermissionValueProvider2)); - context.GetResourcePermissionOrNull("MyResourcePermissions1").ShouldNotBeNull(); + context.GetResourcePermissionOrNull("MyResourcePermission1").ShouldNotBeNull(); } } diff --git a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/FakeResourcePermissionStore.cs b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/FakeResourcePermissionStore.cs index 64884db17a..54ef8cd9a0 100644 --- a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/FakeResourcePermissionStore.cs +++ b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/FakeResourcePermissionStore.cs @@ -9,12 +9,24 @@ public class FakeResourcePermissionStore : IResourcePermissionStore, ITransientD { public Task IsGrantedAsync(string name, string resourceName, string resourceKey, string providerName, string providerKey) { - throw new System.NotImplementedException(); + return Task.FromResult((name == "MyResourcePermission3" || name == "MyResourcePermission5") && + resourceName == TestEntityResource.ResourceName && + (resourceKey == TestEntityResource.ResourceKey3 || resourceKey == TestEntityResource.ResourceKey5)); } public Task IsGrantedAsync(string[] names, string resourceName, string resourceKey, string providerName, string providerKey) { - throw new System.NotImplementedException(); + var result = new MultiplePermissionGrantResult(); + foreach (var name in names) + { + result.Result.Add(name, (name == "MyResourcePermission3" || name == "MyResourcePermission5" && + resourceName == TestEntityResource.ResourceName && + (resourceKey == TestEntityResource.ResourceKey3 || resourceKey == TestEntityResource.ResourceKey5) + ? PermissionGrantResult.Granted + : PermissionGrantResult.Prohibited)); + } + + return Task.FromResult(result); } public Task GetPermissionsAsync(string resourceName, string resourceKey) diff --git a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/TestEntityResource.cs b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/TestEntityResource.cs index ca702503d8..81db47bf9a 100644 --- a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/TestEntityResource.cs +++ b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/TestEntityResource.cs @@ -1,6 +1,16 @@ +using System; + namespace Volo.Abp.Authorization.TestServices.Resources; public class TestEntityResource { + public static readonly string ResourceName = typeof(TestEntityResource).FullName; + public static readonly string ResourceKey1 = Guid.NewGuid().ToString(); + public static readonly string ResourceKey2 = Guid.NewGuid().ToString(); + public static readonly string ResourceKey3 = Guid.NewGuid().ToString(); + public static readonly string ResourceKey4 = Guid.NewGuid().ToString(); + public static readonly string ResourceKey5 = Guid.NewGuid().ToString(); + public static readonly string ResourceKey6 = Guid.NewGuid().ToString(); + public static readonly string ResourceKey7 = Guid.NewGuid().ToString(); } diff --git a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/TestResourcePermissionValueProvider1.cs b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/TestResourcePermissionValueProvider1.cs index 287e1e6370..3c7dc49a83 100644 --- a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/TestResourcePermissionValueProvider1.cs +++ b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/TestResourcePermissionValueProvider1.cs @@ -16,7 +16,9 @@ public class TestResourcePermissionValueProvider1 : ResourcePermissionValueProvi public override Task CheckAsync(ResourcePermissionValueCheckContext context) { var result = PermissionGrantResult.Undefined; - if (context.Permission.Name == "MyPermission6") + if (context.Permission.Name == "MyResourcePermission6" && + context.ResourceName == TestEntityResource.ResourceName && + context.ResourceKey == TestEntityResource.ResourceKey6) { result = PermissionGrantResult.Granted; } @@ -29,7 +31,9 @@ public class TestResourcePermissionValueProvider1 : ResourcePermissionValueProvi var result = new MultiplePermissionGrantResult(); foreach (var name in context.Permissions.Select(x => x.Name)) { - result.Result.Add(name, name == "MyPermission6" + result.Result.Add(name, name == "MyResourcePermission6" && + context.ResourceName == TestEntityResource.ResourceName && + context.ResourceKey == TestEntityResource.ResourceKey6 ? PermissionGrantResult.Granted : PermissionGrantResult.Undefined); } diff --git a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/TestResourcePermissionValueProvider2.cs b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/TestResourcePermissionValueProvider2.cs index c606c8c646..c4ac61cb2c 100644 --- a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/TestResourcePermissionValueProvider2.cs +++ b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/TestResourcePermissionValueProvider2.cs @@ -16,7 +16,9 @@ public class TestResourcePermissionValueProvider2 : ResourcePermissionValueProvi public override Task CheckAsync(ResourcePermissionValueCheckContext context) { var result = PermissionGrantResult.Undefined; - if (context.Permission.Name == "MyPermission7") + if (context.Permission.Name == "MyResourcePermission7" && + context.ResourceName == TestEntityResource.ResourceName && + context.ResourceKey == TestEntityResource.ResourceKey7) { result = PermissionGrantResult.Granted; } @@ -29,7 +31,9 @@ public class TestResourcePermissionValueProvider2 : ResourcePermissionValueProvi var result = new MultiplePermissionGrantResult(); foreach (var name in context.Permissions.Select(x => x.Name)) { - result.Result.Add(name, name == "MyPermission7" + result.Result.Add(name, name == "MyResourcePermission7" && + context.ResourceName == TestEntityResource.ResourceName && + context.ResourceKey == TestEntityResource.ResourceKey7 ? PermissionGrantResult.Granted : PermissionGrantResult.Undefined); }