diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/ResourcePermissionManager.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/ResourcePermissionManager.cs index f951f312eb..cd0b006036 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/ResourcePermissionManager.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/ResourcePermissionManager.cs @@ -83,12 +83,20 @@ public class ResourcePermissionManager : IResourcePermissionManager, ISingletonD return availableServices; } - public virtual Task GetProviderKeyLookupServiceAsync(string serviceName) + public virtual async Task GetProviderKeyLookupServiceAsync(string serviceName) { var service = _lazyProviderKeyLookupServices.Value.FirstOrDefault(s => s.Name == serviceName); - return service == null - ? throw new AbpException("Unknown resource permission provider key lookup service: " + serviceName) - : Task.FromResult(service); + if (service == null) + { + throw new AbpException("Unknown resource permission provider key lookup service: " + serviceName); + } + + if (!await service.IsAvailableAsync()) + { + throw new AbpException("The resource permission provider key lookup service '" + serviceName + "' is not available in the current context."); + } + + return service; } public virtual async Task> GetAvailablePermissionsAsync(string resourceName) diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Domain.Tests/Volo/Abp/PermissionManagement/ResourcePermissionManager_Tests.cs b/modules/permission-management/test/Volo.Abp.PermissionManagement.Domain.Tests/Volo/Abp/PermissionManagement/ResourcePermissionManager_Tests.cs index 4124f216cd..d09d477e2f 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.Domain.Tests/Volo/Abp/PermissionManagement/ResourcePermissionManager_Tests.cs +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Domain.Tests/Volo/Abp/PermissionManagement/ResourcePermissionManager_Tests.cs @@ -42,6 +42,12 @@ public class ResourcePermissionManager_Tests : PermissionTestBase await _resourcePermissionManager.GetProviderKeyLookupServiceAsync("UndefinedProvider"); }); exception.Message.ShouldBe("Unknown resource permission provider key lookup service: UndefinedProvider"); + + var unavailableException = await Assert.ThrowsAsync(async () => + { + await _resourcePermissionManager.GetProviderKeyLookupServiceAsync("TestUnavailable"); + }); + unavailableException.Message.ShouldBe("The resource permission provider key lookup service 'TestUnavailable' is not available in the current context."); } [Fact]