feat: 增加角色/权限管理 API 与应用层命令

This commit is contained in:
2025-12-02 16:43:46 +08:00
parent b459c7edbe
commit 35b12fb054
25 changed files with 743 additions and 1 deletions

View File

@@ -0,0 +1,54 @@
using System;
using System.Linq;
using MediatR;
using TakeoutSaaS.Application.Identity.Contracts;
using TakeoutSaaS.Application.Identity.Queries;
using TakeoutSaaS.Domain.Identity.Repositories;
using TakeoutSaaS.Shared.Abstractions.Results;
using TakeoutSaaS.Shared.Abstractions.Tenancy;
namespace TakeoutSaaS.Application.Identity.Handlers;
/// <summary>
/// 权限分页查询处理器。
/// </summary>
public sealed class SearchPermissionsQueryHandler(
IPermissionRepository permissionRepository,
ITenantProvider tenantProvider)
: IRequestHandler<SearchPermissionsQuery, PagedResult<PermissionDto>>
{
public async Task<PagedResult<PermissionDto>> Handle(SearchPermissionsQuery request, CancellationToken cancellationToken)
{
var tenantId = tenantProvider.GetCurrentTenantId();
var permissions = await permissionRepository.SearchAsync(tenantId, request.Keyword, cancellationToken);
var sorted = request.SortBy?.ToLowerInvariant() switch
{
"name" => request.SortDescending
? permissions.OrderByDescending(x => x.Name)
: permissions.OrderBy(x => x.Name),
"code" => request.SortDescending
? permissions.OrderByDescending(x => x.Code)
: permissions.OrderBy(x => x.Code),
_ => request.SortDescending
? permissions.OrderByDescending(x => x.CreatedAt)
: permissions.OrderBy(x => x.CreatedAt)
};
var paged = sorted
.Skip((request.Page - 1) * request.PageSize)
.Take(request.PageSize)
.ToList();
var items = paged.Select(permission => new PermissionDto
{
Id = permission.Id,
TenantId = permission.TenantId,
Name = permission.Name,
Code = permission.Code,
Description = permission.Description
}).ToList();
return new PagedResult<PermissionDto>(items, request.Page, request.PageSize, permissions.Count);
}
}