using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using TakeoutSaaS.Application.Identity.Abstractions; using TakeoutSaaS.Application.Identity.Contracts; using TakeoutSaaS.Application.Identity.Queries; using TakeoutSaaS.Module.Authorization.Attributes; using TakeoutSaaS.Shared.Abstractions.Results; using TakeoutSaaS.Shared.Web.Api; namespace TakeoutSaaS.AdminApi.Controllers; /// /// 用户权限洞察接口。 /// [ApiVersion("1.0")] [Authorize] [Route("api/admin/v{version:apiVersion}/users/permissions")] public sealed class UserPermissionsController(IAdminAuthService authService) : BaseApiController { /// /// 分页查询当前租户用户的角色与权限概览。 /// /// /// 示例: /// /// GET /api/admin/v1/users/permissions?keyword=ops&page=1&pageSize=20&sortBy=createdAt&sortDescending=true /// Header: Authorization: Bearer <JWT> /// 响应: /// { /// "success": true, /// "code": 200, /// "data": { /// "items": [ /// { /// "userId": "900123456789012346", /// "tenantId": "100000000000000001", /// "merchantId": "200000000000000001", /// "account": "ops.manager", /// "displayName": "运营经理", /// "roles": ["OpsManager", "Reporter"], /// "permissions": ["delivery:read", "order:read", "payment:read"], /// "createdAt": "2025-12-01T08:30:00Z" /// } /// ], /// "page": 1, /// "pageSize": 20, /// "totalCount": 1, /// "totalPages": 1 /// } /// } /// /// [HttpGet] [PermissionAuthorize("identity:permission:read")] [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)] public async Task>> Search( [FromQuery] SearchUserPermissionsQuery query, CancellationToken cancellationToken) { // 1. 查询当前租户的用户权限概览 var result = await authService.SearchUserPermissionsAsync( query.Keyword, query.Page, query.PageSize, query.SortBy, query.SortDescending, cancellationToken); // 2. 返回分页结果 return ApiResponse>.Ok(result); } }