From 46281964d9705fb719157879d00789531423e42e Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 21 Nov 2025 18:18:54 +0800 Subject: [PATCH] Add pagination support to resource permission search methods --- .../Volo/Abp/Identity/IUserRoleFinder.cs | 5 +-- .../Volo/Abp/Identity/UserRoleFinder.cs | 20 ++++-------- .../Abp/Identity/HttpClientUserRoleFinder.cs | 12 ++++--- ...ourcePermissionProviderKeyLookupService.cs | 4 +-- ...ourcePermissionProviderKeyLookupService.cs | 4 +-- .../IPermissionAppService.cs | 2 +- .../PermissionAppService.cs | 4 +-- ...ourcePermissionProviderKeyLookupService.cs | 2 +- .../PermissionsClientProxy.Generated.cs | 5 +-- .../permissionManagement-generate-proxy.json | 32 +++++++++++++++++-- .../PermissionsController.cs | 4 +-- ...dd-resource-permission-management-modal.js | 6 +++- .../permissionManagement-proxy.js | 4 +-- ...ourcePermissionProviderKeyLookupService.cs | 2 +- 14 files changed, 68 insertions(+), 38 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IUserRoleFinder.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IUserRoleFinder.cs index 751160236d..166d066245 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IUserRoleFinder.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IUserRoleFinder.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Threading; using System.Threading.Tasks; namespace Volo.Abp.Identity; @@ -11,9 +12,9 @@ public interface IUserRoleFinder Task GetRoleNamesAsync(Guid userId); - Task> SearchUserAsync(string filter); + Task> SearchUserAsync(string filter, int page = 1); - Task> SearchRoleAsync(string filter); + Task> SearchRoleAsync(string filter, int page = 1); Task> SearchUserByIdsAsync(Guid[] ids); 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 8baf079273..a958ac1456 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 @@ -29,16 +29,12 @@ public class UserRoleFinder : IUserRoleFinder, ITransientDependency return (await IdentityUserRepository.GetRoleNamesAsync(userId)).ToArray(); } - public virtual async Task> SearchUserAsync(string filter) + public virtual async Task> SearchUserAsync(string filter, int page = 1) { - if (filter.IsNullOrEmpty()) - { - return new List(); - } - using (IdentityUserRepository.DisableTracking()) { - var users = await IdentityUserRepository.GetListAsync(filter: filter); + page = page < 1 ? 1 : page; + var users = await IdentityUserRepository.GetListAsync(filter: filter, skipCount: (page - 1) * 10, maxResultCount: 10); return users.Select(user => new UserFinderResult { Id = user.Id, @@ -47,16 +43,12 @@ public class UserRoleFinder : IUserRoleFinder, ITransientDependency } } - public virtual async Task> SearchRoleAsync(string filter) + public virtual async Task> SearchRoleAsync(string filter, int page = 1) { - if (filter.IsNullOrEmpty()) - { - return new List(); - } - using (IdentityUserRepository.DisableTracking()) { - var roles = await IdentityRoleRepository.GetListAsync(filter: filter); + page = page < 1 ? 1 : page; + var roles = await IdentityRoleRepository.GetListAsync(filter: filter, skipCount: (page - 1) * 10, maxResultCount: 10); return roles.Select(user => new RoleFinderResult { Id = user.Id, diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/HttpClientUserRoleFinder.cs b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/HttpClientUserRoleFinder.cs index 6299112311..6c32d8b11d 100644 --- a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/HttpClientUserRoleFinder.cs +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/HttpClientUserRoleFinder.cs @@ -31,11 +31,13 @@ public class HttpClientUserRoleFinder : IUserRoleFinder, ITransientDependency return await _userIntegrationService.GetRoleNamesAsync(userId); } - public virtual async Task> SearchUserAsync(string filter) + public virtual async Task> SearchUserAsync(string filter, int page = 1) { + page = page < 1 ? 1 : page; var users = await _userIntegrationService.SearchAsync(new UserLookupSearchInputDto() { - Filter = filter + Filter = filter, + SkipCount = (page - 1) * 10 }); return users.Items.Select(u => new UserFinderResult { @@ -44,11 +46,13 @@ public class HttpClientUserRoleFinder : IUserRoleFinder, ITransientDependency }).ToList(); } - public virtual async Task> SearchRoleAsync(string filter) + public virtual async Task> SearchRoleAsync(string filter, int page = 1) { + page = page < 1 ? 1 : page; var roles = await _userIntegrationService.SearchRoleAsync(new RoleLookupSearchInputDto() { - Filter = filter + Filter = filter, + SkipCount = (page - 1) * 10 }); return roles.Items.Select(r => new RoleFinderResult 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 18096e5167..c0e8aa548d 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 @@ -25,9 +25,9 @@ public class RoleResourcePermissionProviderKeyLookupService : IResourcePermissio DisplayName = LocalizableString.Create(nameof(RoleResourcePermissionProviderKeyLookupService)); } - public virtual async Task> SearchAsync(string filter = null, CancellationToken cancellationToken = default) + public virtual async Task> SearchAsync(string filter = null, int page = 1, CancellationToken cancellationToken = default) { - var roles = await UserRoleFinder.SearchRoleAsync(filter); + var roles = await UserRoleFinder.SearchRoleAsync(filter, page); return roles.Select(r => new ResourcePermissionProviderKeyInfo(r.RoleName, r.RoleName)).ToList(); } diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserResourcePermissionProviderKeyLookupService.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserResourcePermissionProviderKeyLookupService.cs index a0cf06d40d..3e5470f432 100644 --- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserResourcePermissionProviderKeyLookupService.cs +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserResourcePermissionProviderKeyLookupService.cs @@ -25,9 +25,9 @@ public class UserResourcePermissionProviderKeyLookupService : IResourcePermissio DisplayName = LocalizableString.Create(nameof(UserResourcePermissionProviderKeyLookupService)); } - public virtual async Task> SearchAsync(string filter = null, CancellationToken cancellationToken = default) + public virtual async Task> SearchAsync(string filter = null, int page = 1, CancellationToken cancellationToken = default) { - var users = await UserRoleFinder.SearchUserAsync(filter); + var users = await UserRoleFinder.SearchUserAsync(filter, page); return users.Select(u => new ResourcePermissionProviderKeyInfo(u.Id.ToString(), u.UserName)).ToList(); } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/IPermissionAppService.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/IPermissionAppService.cs index 1e4f5d54ac..ea0017a544 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/IPermissionAppService.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/IPermissionAppService.cs @@ -14,7 +14,7 @@ public interface IPermissionAppService : IApplicationService Task GetResourceProviderKeyLookupServicesAsync(); - Task SearchResourceProviderKeyAsync(string serviceName, string filter); + Task SearchResourceProviderKeyAsync(string serviceName, string filter, int page); Task GetResourceDefinitionsAsync([NotNull] string resourceName); diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs index 8e5c5b0b79..7421cf7fbd 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs @@ -181,10 +181,10 @@ public class PermissionAppService : ApplicationService, IPermissionAppService } [Authorize(PermissionManagementPermissions.ManageResourcePermissions)] - public virtual async Task SearchResourceProviderKeyAsync(string serviceName, string filter) + public virtual async Task SearchResourceProviderKeyAsync(string serviceName, string filter, int page) { var lookupService = await ResourcePermissionManager.GetProviderKeyLookupServiceAsync(serviceName); - var keys = await lookupService.SearchAsync(filter); + var keys = await lookupService.SearchAsync(filter, page); return new SearchProviderKeyListResultDto { Keys = keys.Select(x => new SearchProviderKeyInfo diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionProviderKeyLookupService.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionProviderKeyLookupService.cs index bdd5eb8f84..aa6ad2a06e 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionProviderKeyLookupService.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionProviderKeyLookupService.cs @@ -11,7 +11,7 @@ public interface IResourcePermissionProviderKeyLookupService public ILocalizableString DisplayName { get; } - Task> SearchAsync(string filter = null, CancellationToken cancellationToken = default); + Task> SearchAsync(string filter = null, int page = 1, CancellationToken cancellationToken = default); Task> SearchAsync(string[] keys, CancellationToken cancellationToken = default); } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/Volo/Abp/PermissionManagement/PermissionsClientProxy.Generated.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/Volo/Abp/PermissionManagement/PermissionsClientProxy.Generated.cs index cc9dfdf4f7..fc1e851bae 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/Volo/Abp/PermissionManagement/PermissionsClientProxy.Generated.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/Volo/Abp/PermissionManagement/PermissionsClientProxy.Generated.cs @@ -51,12 +51,13 @@ public partial class PermissionsClientProxy : ClientProxyBase(nameof(GetResourceProviderKeyLookupServicesAsync)); } - public virtual async Task SearchResourceProviderKeyAsync(string serviceName, string filter) + public virtual async Task SearchResourceProviderKeyAsync(string serviceName, string filter, int page) { return await RequestAsync(nameof(SearchResourceProviderKeyAsync), new ClientProxyRequestTypeValue { { typeof(string), serviceName }, - { typeof(string), filter } + { typeof(string), filter }, + { typeof(int), page } }); } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/permissionManagement-generate-proxy.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/permissionManagement-generate-proxy.json index 62dedb4c1b..2907378292 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/permissionManagement-generate-proxy.json +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/permissionManagement-generate-proxy.json @@ -205,6 +205,14 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null + }, + { + "name": "page", + "typeAsString": "System.Int32, System.Private.CoreLib", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null } ], "returnValue": { @@ -599,8 +607,8 @@ "allowAnonymous": null, "implementFrom": "Volo.Abp.PermissionManagement.IPermissionAppService" }, - "SearchResourceProviderKeyAsyncByServiceNameAndFilter": { - "uniqueName": "SearchResourceProviderKeyAsyncByServiceNameAndFilter", + "SearchResourceProviderKeyAsyncByServiceNameAndFilterAndPage": { + "uniqueName": "SearchResourceProviderKeyAsyncByServiceNameAndFilterAndPage", "name": "SearchResourceProviderKeyAsync", "httpMethod": "GET", "url": "api/permission-management/permissions/search-resource-provider-keys", @@ -621,6 +629,14 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null + }, + { + "name": "page", + "typeAsString": "System.Int32, System.Private.CoreLib", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null } ], "parameters": [ @@ -647,6 +663,18 @@ "constraintTypes": null, "bindingSourceId": "ModelBinding", "descriptorName": "" + }, + { + "nameOnMethod": "page", + "name": "page", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" } ], "returnValue": { diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo/Abp/PermissionManagement/PermissionsController.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo/Abp/PermissionManagement/PermissionsController.cs index 1b5aa19b5e..b7a9cc2ef5 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo/Abp/PermissionManagement/PermissionsController.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo/Abp/PermissionManagement/PermissionsController.cs @@ -42,9 +42,9 @@ public class PermissionsController : AbpControllerBase, IPermissionAppService } [HttpGet("search-resource-provider-keys")] - public virtual Task SearchResourceProviderKeyAsync(string serviceName, string filter) + public virtual Task SearchResourceProviderKeyAsync(string serviceName, string filter, int page) { - return PermissionAppService.SearchResourceProviderKeyAsync(serviceName, filter); + return PermissionAppService.SearchResourceProviderKeyAsync(serviceName, filter, page); } [HttpGet("resource-definitions")] diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/add-resource-permission-management-modal.js b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/add-resource-permission-management-modal.js index 7f59156f9d..5fd096fe29 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/add-resource-permission-management-modal.js +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/add-resource-permission-management-modal.js @@ -19,6 +19,7 @@ var abp = abp || {}; data: function (params) { var query = {}; query["serviceName"] = $('input[name="AddModel.ProviderName"]:checked').val(); + query["page"] = params.page || 1; query["filter"] = params.term; return query; }, @@ -32,7 +33,10 @@ var abp = abp || {}; }) }); return { - results: keyValues + results: keyValues, + pagination: { + more: keyValues.length > 0 + } }; } }, diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/wwwroot/client-proxies/permissionManagement-proxy.js b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/wwwroot/client-proxies/permissionManagement-proxy.js index df85c0be12..a0de671e4e 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/wwwroot/client-proxies/permissionManagement-proxy.js +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/wwwroot/client-proxies/permissionManagement-proxy.js @@ -41,9 +41,9 @@ }, ajaxParams)); }; - volo.abp.permissionManagement.permissions.searchResourceProviderKey = function(serviceName, filter, ajaxParams) { + volo.abp.permissionManagement.permissions.searchResourceProviderKey = function(serviceName, filter, page, ajaxParams) { return abp.ajax($.extend(true, { - url: abp.appPath + 'api/permission-management/permissions/search-resource-provider-keys' + abp.utils.buildQueryString([{ name: 'serviceName', value: serviceName }, { name: 'filter', value: filter }]) + '', + url: abp.appPath + 'api/permission-management/permissions/search-resource-provider-keys' + abp.utils.buildQueryString([{ name: 'serviceName', value: serviceName }, { name: 'filter', value: filter }, { name: 'page', value: page }]) + '', type: 'GET' }, ajaxParams)); }; diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/Volo/Abp/PermissionManagement/TestResourcePermissionProviderKeyLookupService.cs b/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/Volo/Abp/PermissionManagement/TestResourcePermissionProviderKeyLookupService.cs index c86bbcc81a..f42a204f7a 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/Volo/Abp/PermissionManagement/TestResourcePermissionProviderKeyLookupService.cs +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/Volo/Abp/PermissionManagement/TestResourcePermissionProviderKeyLookupService.cs @@ -12,7 +12,7 @@ public class TestResourcePermissionProviderKeyLookupService : IResourcePermissio public ILocalizableString DisplayName => new LocalizableString("Test", "TestResource"); - public Task> SearchAsync(string filter = null, CancellationToken cancellationToken = default) + public Task> SearchAsync(string filter = null, int page = 1, CancellationToken cancellationToken = default) { throw new System.NotImplementedException(); }