From 562914fc69f352b70df8ae2049c114bf538f8db1 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 31 Dec 2025 12:11:23 +0800 Subject: [PATCH] Refactor resource permission key lookup to use names/ClientIds --- .../Authorization/AbpAuthorizationModule.cs | 1 + .../Volo/Abp/Identity/UserRoleFinder.cs | 24 +++++++++---------- ...ourcePermissionProviderKeyLookupService.cs | 6 ++--- .../IdentityServer/Clients/IClientFinder.cs | 3 --- .../IdentityServer/Clients/ClientFinder.cs | 14 ----------- .../Clients/IClientRepository.cs | 2 -- .../Clients/ClientRepository.cs | 7 ------ .../MongoDB/MongoClientRepository.cs | 7 ------ ...ourcePermissionProviderKeyLookupService.cs | 14 ++++------- .../Applications/IApplicationFinder.cs | 3 --- .../Applications/AbpApplicationFinder.cs | 14 ----------- .../IOpenIddictApplicationRepository.cs | 2 -- .../EfCoreOpenIddictApplicationRepository.cs | 7 ------ .../MongoOpenIddictApplicationRepository.cs | 7 ------ ...ourcePermissionProviderKeyLookupService.cs | 14 ++++------- 15 files changed, 24 insertions(+), 101 deletions(-) diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationModule.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationModule.cs index 65b7e1b390..159b72ad66 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationModule.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationModule.cs @@ -47,6 +47,7 @@ public class AbpAuthorizationModule : AbpModule options.ResourceValueProviders.Add(); options.ResourceValueProviders.Add(); + options.ResourceValueProviders.Add(); }); Configure(options => diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/UserRoleFinder.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/UserRoleFinder.cs index 48d8b01a73..633bbd1ed9 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/UserRoleFinder.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/UserRoleFinder.cs @@ -35,10 +35,10 @@ public class UserRoleFinder : IUserRoleFinder, ITransientDependency { page = page < 1 ? 1 : page; var users = await IdentityUserRepository.GetListAsync(filter: filter, skipCount: (page - 1) * 10, maxResultCount: 10); - return users.Select(user => new UserFinderResult + return users.Select(x => new UserFinderResult { - Id = user.Id, - UserName = user.UserName + Id = x.Id, + UserName = x.UserName }).ToList(); } } @@ -49,10 +49,10 @@ public class UserRoleFinder : IUserRoleFinder, ITransientDependency { page = page < 1 ? 1 : page; var roles = await IdentityRoleRepository.GetListAsync(filter: filter, skipCount: (page - 1) * 10, maxResultCount: 10); - return roles.Select(user => new RoleFinderResult + return roles.Select(x => new RoleFinderResult { - Id = user.Id, - RoleName = user.Name + Id = x.Id, + RoleName = x.Name }).ToList(); } } @@ -62,10 +62,10 @@ public class UserRoleFinder : IUserRoleFinder, ITransientDependency using (IdentityUserRepository.DisableTracking()) { var users = await IdentityUserRepository.GetListByIdsAsync(ids); - return users.Select(user => new UserFinderResult + return users.Select(x => new UserFinderResult { - Id = user.Id, - UserName = user.UserName + Id = x.Id, + UserName = x.UserName }).ToList(); } } @@ -75,10 +75,10 @@ public class UserRoleFinder : IUserRoleFinder, ITransientDependency using (IdentityUserRepository.DisableTracking()) { var roles = await IdentityRoleRepository.GetListAsync(names); - return roles.Select(user => new RoleFinderResult + return roles.Select(x => new RoleFinderResult { - Id = user.Id, - RoleName = user.Name + Id = x.Id, + RoleName = x.Name }).ToList(); } } diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleResourcePermissionProviderKeyLookupService.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleResourcePermissionProviderKeyLookupService.cs index fa9fc31f79..ab1824e13d 100644 --- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleResourcePermissionProviderKeyLookupService.cs +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleResourcePermissionProviderKeyLookupService.cs @@ -30,9 +30,9 @@ public class RoleResourcePermissionProviderKeyLookupService : IResourcePermissio return roles.Select(r => new ResourcePermissionProviderKeyInfo(r.RoleName, r.RoleName)).ToList(); } - public virtual async Task> SearchAsync(string[] keys, CancellationToken cancellationToken = default) + public virtual Task> SearchAsync(string[] keys, CancellationToken cancellationToken = default) { - var roles = await UserRoleFinder.SearchRoleByNamesAsync(keys.Distinct().ToArray()); - return roles.Select(r => new ResourcePermissionProviderKeyInfo(r.RoleName, r.RoleName)).ToList(); + // Keys are role names + return Task.FromResult(keys.Select(x => new ResourcePermissionProviderKeyInfo(x, x)).ToList()); } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Clients/IClientFinder.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Clients/IClientFinder.cs index 3d124455ab..be96379902 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Clients/IClientFinder.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Clients/IClientFinder.cs @@ -1,4 +1,3 @@ -using System; using System.Collections.Generic; using System.Threading.Tasks; @@ -7,6 +6,4 @@ namespace Volo.Abp.IdentityServer.Clients; public interface IClientFinder { Task> SearchAsync(string filter, int page = 1); - - Task> SearchByIdsAsync(Guid[] ids); } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientFinder.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientFinder.cs index 52d389af5f..d64215a047 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientFinder.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientFinder.cs @@ -1,4 +1,3 @@ -using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -29,17 +28,4 @@ public class ClientFinder : IClientFinder, ITransientDependency }).ToList(); } } - - public virtual async Task> SearchByIdsAsync(Guid[] ids) - { - using (ClientRepository.DisableTracking()) - { - var clients = await ClientRepository.GetListByIdsAsync(ids); - return clients.Select(x => new ClientFinderResult - { - Id = x.Id, - ClientId = x.ClientId - }).ToList(); - } - } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/IClientRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/IClientRepository.cs index 02793df829..478ca592e0 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/IClientRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/IClientRepository.cs @@ -36,6 +36,4 @@ public interface IClientRepository : IBasicRepository Guid? expectedId = null, CancellationToken cancellationToken = default ); - - Task> GetListByIdsAsync(Guid[] ids, CancellationToken cancellationToken = default); } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs index cd25a63c0e..8edaad0345 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs @@ -61,13 +61,6 @@ public class ClientRepository : EfCoreRepository c.Id != expectedId && c.ClientId == clientId, GetCancellationToken(cancellationToken)); } - public virtual async Task> GetListByIdsAsync(Guid[] ids, CancellationToken cancellationToken = default) - { - return await (await GetDbSetAsync()) - .Where(c => ids.Contains(c.Id)) - .ToListAsync(GetCancellationToken(cancellationToken)); - } - public async override Task DeleteAsync(Guid id, bool autoSave = false, CancellationToken cancellationToken = default) { var dbContext = await GetDbContextAsync(); diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs index bd6e5615c5..d266ac7c52 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs @@ -69,11 +69,4 @@ public class MongoClientRepository : MongoDbRepository c.Id != expectedId && c.ClientId == clientId, GetCancellationToken(cancellationToken)); } - - public virtual async Task> GetListByIdsAsync(Guid[] ids, CancellationToken cancellationToken = default) - { - return await (await GetQueryableAsync(cancellationToken)) - .Where(c => ids.Contains(c.Id)) - .ToListAsync(GetCancellationToken(cancellationToken)); - } } diff --git a/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/Volo/Abp/PermissionManagement/IdentityServer/ClientResourcePermissionProviderKeyLookupService.cs b/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/Volo/Abp/PermissionManagement/IdentityServer/ClientResourcePermissionProviderKeyLookupService.cs index d02cc20d6a..7fc813dabb 100644 --- a/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/Volo/Abp/PermissionManagement/IdentityServer/ClientResourcePermissionProviderKeyLookupService.cs +++ b/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/Volo/Abp/PermissionManagement/IdentityServer/ClientResourcePermissionProviderKeyLookupService.cs @@ -28,18 +28,12 @@ public class ClientResourcePermissionProviderKeyLookupService : IResourcePermiss public virtual async Task> SearchAsync(string filter = null, int page = 1, CancellationToken cancellationToken = default) { var clients = await ClientFinder.SearchAsync(filter, page); - return clients.Select(x => new ResourcePermissionProviderKeyInfo(x.Id.ToString(), x.ClientId)).ToList(); + return clients.Select(x => new ResourcePermissionProviderKeyInfo(x.ClientId, x.ClientId)).ToList(); } - public virtual async Task> SearchAsync(string[] keys, CancellationToken cancellationToken = default) + public virtual Task> SearchAsync(string[] keys, CancellationToken cancellationToken = default) { - var ids = keys - .Select(key => Guid.TryParse(key, out var id) ? (Guid?)id : null) - .Where(id => id.HasValue) - .Select(id => id.Value) - .Distinct() - .ToArray(); - var clients = await ClientFinder.SearchByIdsAsync(ids.ToArray()); - return clients.Select(x => new ResourcePermissionProviderKeyInfo(x.Id.ToString(), x.ClientId)).ToList(); + // Keys are ClientIds + return Task.FromResult(keys.Select(x => new ResourcePermissionProviderKeyInfo(x, x)).ToList()); } } diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo/Abp/OpenIddict/Applications/IApplicationFinder.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo/Abp/OpenIddict/Applications/IApplicationFinder.cs index 02c51c023c..0585df8815 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo/Abp/OpenIddict/Applications/IApplicationFinder.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo/Abp/OpenIddict/Applications/IApplicationFinder.cs @@ -1,4 +1,3 @@ -using System; using System.Collections.Generic; using System.Threading.Tasks; @@ -7,6 +6,4 @@ namespace Volo.Abp.OpenIddict.Applications; public interface IApplicationFinder { Task> SearchAsync(string filter, int page = 1); - - Task> SearchByIdsAsync(Guid[] ids); } diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpApplicationFinder.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpApplicationFinder.cs index 7c1ec443d0..56c6f9af99 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpApplicationFinder.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpApplicationFinder.cs @@ -1,4 +1,3 @@ -using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -29,17 +28,4 @@ public class AbpApplicationFinder : IApplicationFinder, ITransientDependency }).ToList(); } } - - public virtual async Task> SearchByIdsAsync(Guid[] ids) - { - using (ApplicationRepository.DisableTracking()) - { - var applications = await ApplicationRepository.GetListByIdsAsync(ids); - return applications.Select(x => new ApplicationFinderResult - { - Id = x.Id, - ClientId = x.ClientId - }).ToList(); - } - } } diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/IOpenIddictApplicationRepository.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/IOpenIddictApplicationRepository.cs index 5a10d9da3f..8f92ad8310 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/IOpenIddictApplicationRepository.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/IOpenIddictApplicationRepository.cs @@ -19,6 +19,4 @@ public interface IOpenIddictApplicationRepository : IBasicRepository> FindByRedirectUriAsync(string address, CancellationToken cancellationToken = default); Task> ListAsync(int? count, int? offset, CancellationToken cancellationToken = default); - - Task> GetListByIdsAsync(Guid[] ids, CancellationToken cancellationToken = default); } diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Applications/EfCoreOpenIddictApplicationRepository.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Applications/EfCoreOpenIddictApplicationRepository.cs index ceb52374d3..3963e09630 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Applications/EfCoreOpenIddictApplicationRepository.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Applications/EfCoreOpenIddictApplicationRepository.cs @@ -62,11 +62,4 @@ public class EfCoreOpenIddictApplicationRepository : EfCoreRepository>(count.HasValue, count) .ToListAsync(GetCancellationToken(cancellationToken)); } - - public virtual async Task> GetListByIdsAsync(Guid[] ids, CancellationToken cancellationToken = default) - { - return await (await GetDbSetAsync()) - .Where(x => ids.Contains(x.Id)) - .ToListAsync(GetCancellationToken(cancellationToken)); - } } diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Applications/MongoOpenIddictApplicationRepository.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Applications/MongoOpenIddictApplicationRepository.cs index d152cee48a..7b3b0ba826 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Applications/MongoOpenIddictApplicationRepository.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Applications/MongoOpenIddictApplicationRepository.cs @@ -64,11 +64,4 @@ public class MongoOpenIddictApplicationRepository : MongoDbRepository>(count.HasValue, count) .ToListAsync(GetCancellationToken(cancellationToken)); } - - public virtual async Task> GetListByIdsAsync(Guid[] ids, CancellationToken cancellationToken = default) - { - return await (await GetQueryableAsync(cancellationToken)) - .Where(x => ids.Contains(x.Id)) - .ToListAsync(GetCancellationToken(cancellationToken)); - } } diff --git a/modules/openiddict/src/Volo.Abp.PermissionManagement.Domain.OpenIddict/Volo/Abp/PermissionManagement/OpenIddict/ApplicationResourcePermissionProviderKeyLookupService.cs b/modules/openiddict/src/Volo.Abp.PermissionManagement.Domain.OpenIddict/Volo/Abp/PermissionManagement/OpenIddict/ApplicationResourcePermissionProviderKeyLookupService.cs index 54a06dc6cf..98d476f5b8 100644 --- a/modules/openiddict/src/Volo.Abp.PermissionManagement.Domain.OpenIddict/Volo/Abp/PermissionManagement/OpenIddict/ApplicationResourcePermissionProviderKeyLookupService.cs +++ b/modules/openiddict/src/Volo.Abp.PermissionManagement.Domain.OpenIddict/Volo/Abp/PermissionManagement/OpenIddict/ApplicationResourcePermissionProviderKeyLookupService.cs @@ -29,18 +29,12 @@ public class ApplicationResourcePermissionProviderKeyLookupService : IResourcePe public virtual async Task> SearchAsync(string filter = null, int page = 1, CancellationToken cancellationToken = default) { var applications = await ApplicationFinder.SearchAsync(filter, page); - return applications.Select(x => new ResourcePermissionProviderKeyInfo(x.Id.ToString(), x.ClientId)).ToList(); + return applications.Select(x => new ResourcePermissionProviderKeyInfo(x.ClientId, x.ClientId)).ToList(); } - public virtual async Task> SearchAsync(string[] keys, CancellationToken cancellationToken = default) + public virtual Task> SearchAsync(string[] keys, CancellationToken cancellationToken = default) { - var ids = keys - .Select(key => Guid.TryParse(key, out var id) ? (Guid?)id : null) - .Where(id => id.HasValue) - .Select(id => id.Value) - .Distinct() - .ToArray(); - var applications = await ApplicationFinder.SearchByIdsAsync(ids.ToArray()); - return applications.Select(x => new ResourcePermissionProviderKeyInfo(x.Id.ToString(), x.ClientId)).ToList(); + // Keys are ClientIds + return Task.FromResult(keys.Select(x => new ResourcePermissionProviderKeyInfo(x, x)).ToList()); } }