Browse Source

Add resource permission value provider tests

pull/24374/head
maliming 10 months ago
parent
commit
d278998a4a
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 4
      framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/AbpAuthorizationTestModule.cs
  2. 11
      framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/PermissionValueProviderManager_Tests.cs
  3. 58
      framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/ResourcePermissionValueProviderManager_Tests.cs
  4. 23
      framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/AuthorizationTestResourcePermissionDefinitionProvider.cs
  5. 34
      framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/FakeResourcePermissionStore.cs
  6. 6
      framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/TestEntityResource.cs
  7. 39
      framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/TestResourcePermissionValueProvider1.cs
  8. 39
      framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/TestResourcePermissionValueProvider2.cs

4
framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/AbpAuthorizationTestModule.cs

@ -1,6 +1,7 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Authorization.TestServices;
using Volo.Abp.Authorization.TestServices.Resources;
using Volo.Abp.Autofac;
using Volo.Abp.DynamicProxy;
using Volo.Abp.ExceptionHandling;
@ -31,6 +32,9 @@ public class AbpAuthorizationTestModule : AbpModule
{
options.ValueProviders.Add<TestPermissionValueProvider1>();
options.ValueProviders.Add<TestPermissionValueProvider2>();
options.ResourceValueProviders.Add<TestResourcePermissionValueProvider1>();
options.ResourceValueProviders.Add<TestResourcePermissionValueProvider2>();
});
}
}

11
framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/PermissionValueProviderManager_Tests.cs

@ -2,12 +2,11 @@ using System;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Shouldly;
using Volo.Abp.Authorization;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Authorization.TestServices;
using Xunit;
namespace Volo.Abp;
namespace Volo.Abp.Authorization;
public class PermissionValueProviderManager_Tests: AuthorizationTestBase
{
@ -17,7 +16,7 @@ public class PermissionValueProviderManager_Tests: AuthorizationTestBase
{
_permissionValueProviderManager = GetRequiredService<IPermissionValueProviderManager>();
}
protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
{
options.Services.Configure<AbpPermissionOptions>(permissionOptions =>
@ -25,7 +24,7 @@ public class PermissionValueProviderManager_Tests: AuthorizationTestBase
permissionOptions.ValueProviders.Add<TestDuplicatePermissionValueProvider>();
});
}
[Fact]
public void Should_Throw_Exception_If_Duplicate_Provider_Name_Detected()
{
@ -33,7 +32,7 @@ public class PermissionValueProviderManager_Tests: AuthorizationTestBase
{
var providers = _permissionValueProviderManager.ValueProviders;
});
exception.Message.ShouldBe($"Duplicate permission value provider name detected: TestPermissionValueProvider1. Providers:{Environment.NewLine}{typeof(TestDuplicatePermissionValueProvider).FullName}{Environment.NewLine}{typeof(TestPermissionValueProvider1).FullName}");
}
}
@ -55,4 +54,4 @@ public class TestDuplicatePermissionValueProvider : PermissionValueProvider
{
throw new NotImplementedException();
}
}
}

58
framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/ResourcePermissionValueProviderManager_Tests.cs

@ -0,0 +1,58 @@
using System;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
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 ResourcePermissionValueProviderManager_Tests: AuthorizationTestBase
{
private readonly IResourcePermissionValueProviderManager _resourcePermissionValueProviderManager;
public ResourcePermissionValueProviderManager_Tests()
{
_resourcePermissionValueProviderManager = GetRequiredService<IResourcePermissionValueProviderManager>();
}
protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
{
options.Services.Configure<AbpPermissionOptions>(permissionOptions =>
{
permissionOptions.ResourceValueProviders.Add<TestDuplicateResourcePermissionValueProvider>();
});
}
[Fact]
public void Should_Throw_Exception_If_Duplicate_Provider_Name_Detected()
{
var exception = Assert.Throws<AbpException>(() =>
{
var providers = _resourcePermissionValueProviderManager.ValueProviders;
});
exception.Message.ShouldBe($"Duplicate resource permission value provider name detected: TestResourcePermissionValueProvider1. Providers:{Environment.NewLine}{typeof(TestDuplicateResourcePermissionValueProvider).FullName}{Environment.NewLine}{typeof(TestResourcePermissionValueProvider1).FullName}");
}
}
public class TestDuplicateResourcePermissionValueProvider : ResourcePermissionValueProvider
{
public TestDuplicateResourcePermissionValueProvider(IResourcePermissionStore permissionStore) : base(permissionStore)
{
}
public override string Name => "TestResourcePermissionValueProvider1";
public override Task<PermissionGrantResult> CheckAsync(ResourcePermissionValueCheckContext context)
{
throw new NotImplementedException();
}
public override Task<MultiplePermissionGrantResult> CheckAsync(ResourcePermissionValuesCheckContext context)
{
throw new NotImplementedException();
}
}

23
framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/AuthorizationTestResourcePermissionDefinitionProvider.cs

@ -0,0 +1,23 @@
using Shouldly;
using Volo.Abp.Authorization.Permissions;
namespace Volo.Abp.Authorization.TestServices.Resources;
public class AuthorizationTestResourcePermissionDefinitionProvider : PermissionDefinitionProvider
{
public override void Define(IPermissionDefinitionContext context)
{
var permission1 = context.AddResourcePermission("MyResourcePermissions1", resourceName: typeof(TestEntityResource).FullName!);
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.GetResourcePermissionOrNull("MyResourcePermissions1").ShouldNotBeNull();
}
}

34
framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/FakeResourcePermissionStore.cs

@ -0,0 +1,34 @@
using System.Threading.Tasks;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Authorization.Permissions.Resources;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Authorization.TestServices.Resources;
public class FakeResourcePermissionStore : IResourcePermissionStore, ITransientDependency
{
public Task<bool> IsGrantedAsync(string name, string resourceName, string resourceKey, string providerName, string providerKey)
{
throw new System.NotImplementedException();
}
public Task<MultiplePermissionGrantResult> IsGrantedAsync(string[] names, string resourceName, string resourceKey, string providerName, string providerKey)
{
throw new System.NotImplementedException();
}
public Task<MultiplePermissionGrantResult> GetPermissionsAsync(string resourceName, string resourceKey)
{
throw new System.NotImplementedException();
}
public Task<string[]> GetGrantedPermissionsAsync(string resourceName, string resourceKey)
{
throw new System.NotImplementedException();
}
public Task<string[]> GetGrantedResourceKeysAsync(string resourceName, string name)
{
throw new System.NotImplementedException();
}
}

6
framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/TestEntityResource.cs

@ -0,0 +1,6 @@
namespace Volo.Abp.Authorization.TestServices.Resources;
public class TestEntityResource
{
}

39
framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/TestResourcePermissionValueProvider1.cs

@ -0,0 +1,39 @@
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Authorization.Permissions.Resources;
namespace Volo.Abp.Authorization.TestServices.Resources;
public class TestResourcePermissionValueProvider1 : ResourcePermissionValueProvider
{
public TestResourcePermissionValueProvider1(IResourcePermissionStore permissionStore) : base(permissionStore)
{
}
public override string Name => "TestResourcePermissionValueProvider1";
public override Task<PermissionGrantResult> CheckAsync(ResourcePermissionValueCheckContext context)
{
var result = PermissionGrantResult.Undefined;
if (context.Permission.Name == "MyPermission6")
{
result = PermissionGrantResult.Granted;
}
return Task.FromResult(result);
}
public override Task<MultiplePermissionGrantResult> CheckAsync(ResourcePermissionValuesCheckContext context)
{
var result = new MultiplePermissionGrantResult();
foreach (var name in context.Permissions.Select(x => x.Name))
{
result.Result.Add(name, name == "MyPermission6"
? PermissionGrantResult.Granted
: PermissionGrantResult.Undefined);
}
return Task.FromResult(result);
}
}

39
framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/Resources/TestResourcePermissionValueProvider2.cs

@ -0,0 +1,39 @@
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Authorization.Permissions.Resources;
namespace Volo.Abp.Authorization.TestServices.Resources;
public class TestResourcePermissionValueProvider2 : ResourcePermissionValueProvider
{
public TestResourcePermissionValueProvider2(IResourcePermissionStore permissionStore) : base(permissionStore)
{
}
public override string Name => "TestResourcePermissionValueProvider2";
public override Task<PermissionGrantResult> CheckAsync(ResourcePermissionValueCheckContext context)
{
var result = PermissionGrantResult.Undefined;
if (context.Permission.Name == "MyPermission7")
{
result = PermissionGrantResult.Granted;
}
return Task.FromResult(result);
}
public override Task<MultiplePermissionGrantResult> CheckAsync(ResourcePermissionValuesCheckContext context)
{
var result = new MultiplePermissionGrantResult();
foreach (var name in context.Permissions.Select(x => x.Name))
{
result.Result.Add(name, name == "MyPermission7"
? PermissionGrantResult.Granted
: PermissionGrantResult.Undefined);
}
return Task.FromResult(result);
}
}
Loading…
Cancel
Save