diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RolePermissionManagementProvider.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RolePermissionManagementProvider.cs index 534eef745f..d1af0a0c90 100644 --- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RolePermissionManagementProvider.cs +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RolePermissionManagementProvider.cs @@ -30,30 +30,9 @@ namespace Volo.Abp.PermissionManagement.Identity public override async Task CheckAsync(string name, string providerName, string providerKey) { - if (providerName == Name) - { - return new PermissionValueProviderGrantInfo( - await PermissionGrantRepository.FindAsync(name, providerName, providerKey) != null, - providerKey - ); - } - - if (providerName == UserPermissionValueProvider.ProviderName) - { - var userId = Guid.Parse(providerKey); - var roleNames = await UserRoleFinder.GetRolesAsync(userId); - - foreach (var roleName in roleNames) - { - var permissionGrant = await PermissionGrantRepository.FindAsync(name, Name, roleName); - if (permissionGrant != null) - { - return new PermissionValueProviderGrantInfo(true, roleName); - } - } - } + var multipleGrantInfo = await CheckAsync(new[] {name}, providerName, providerKey); - return PermissionValueProviderGrantInfo.NonGranted; + return multipleGrantInfo.Result.Values.First(); } public override async Task CheckAsync(string[] names, string providerName, string providerKey) @@ -85,9 +64,10 @@ namespace Volo.Abp.PermissionManagement.Identity foreach (var permissionName in names) { - if (permissionGrants.Any(x => x.Name == permissionName)) + var permissionGrant = permissionGrants.FirstOrDefault(x => x.Name == permissionName); + if (permissionGrant != null) { - multiplePermissionValueProviderGrantInfo.Result[permissionName] = new PermissionValueProviderGrantInfo(true, providerKey); + multiplePermissionValueProviderGrantInfo.Result[permissionName] = new PermissionValueProviderGrantInfo(true, permissionGrant.ProviderKey); } } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs index 691c39e92b..2c340c3d7c 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs @@ -150,39 +150,9 @@ namespace Volo.Abp.PermissionManagement protected virtual async Task GetInternalAsync(PermissionDefinition permission, string providerName, string providerKey) { - var result = new PermissionWithGrantedProviders(permission.Name, false); + var multiplePermissionWithGrantedProviders = await GetInternalAsync(new PermissionDefinition[]{permission}, providerName, providerKey); - if (!permission.IsEnabled) - { - return result; - } - - if (!await SimpleStateCheckerManager.IsEnabledAsync(permission)) - { - return result; - } - - if (!permission.MultiTenancySide.HasFlag(CurrentTenant.GetMultiTenancySide())) - { - return result; - } - - if (permission.Providers.Any() && !permission.Providers.Contains(providerName)) - { - return result; - } - - foreach (var provider in ManagementProviders) - { - var providerResult = await provider.CheckAsync(permission.Name, providerName, providerKey); - if (providerResult.IsGranted) - { - result.IsGranted = true; - result.Providers.Add(new PermissionValueProviderInfo(provider.Name, providerResult.ProviderKey)); - } - } - - return result; + return multiplePermissionWithGrantedProviders.Result.First(); } protected virtual async Task GetInternalAsync(PermissionDefinition[] permissions, string providerName, string providerKey)