From 8824fb98aae2055b58953ce5f77fdffb84eadda4 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 25 Feb 2026 20:12:15 +0800 Subject: [PATCH] feat: Enhance `GetProviderKeyLookupServiceAsync` to check service availability --- .../ResourcePermissionManager.cs | 16 ++++++++++++---- .../ResourcePermissionManager_Tests.cs | 6 ++++++ 2 files changed, 18 insertions(+), 4 deletions(-) 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]