You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
4.1 KiB
121 lines
4.1 KiB
using System;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using MediatR;
|
|
using Microsoft.Extensions.Logging;
|
|
using X1.Domain.Entities;
|
|
using X1.Domain.Repositories.Identity;
|
|
using X1.Domain.Common;
|
|
using System.Collections.Generic;
|
|
|
|
namespace X1.Application.Features.Permissions.Queries;
|
|
|
|
/// <summary>
|
|
/// 获取所有权限查询处理器
|
|
/// </summary>
|
|
public sealed class GetAllPermissionsQueryHandler : IRequestHandler<GetAllPermissionsQuery, OperationResult<GetAllPermissionsResponse>>
|
|
{
|
|
private readonly IPermissionRepository _permissionRepository;
|
|
private readonly ILogger<GetAllPermissionsQueryHandler> _logger;
|
|
|
|
/// <summary>
|
|
/// 初始化处理器
|
|
/// </summary>
|
|
public GetAllPermissionsQueryHandler(
|
|
IPermissionRepository permissionRepository,
|
|
ILogger<GetAllPermissionsQueryHandler> logger)
|
|
{
|
|
_permissionRepository = permissionRepository;
|
|
_logger = logger;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 处理获取所有权限查询
|
|
/// </summary>
|
|
public async Task<OperationResult<GetAllPermissionsResponse>> Handle(
|
|
GetAllPermissionsQuery request,
|
|
CancellationToken cancellationToken)
|
|
{
|
|
try
|
|
{
|
|
_logger.LogInformation("开始获取权限列表,页码: {PageNumber}, 页大小: {PageSize}", request.PageNumber, request.PageSize);
|
|
|
|
var permissions = await _permissionRepository.GetAllAsync();
|
|
|
|
if (!permissions.Any())
|
|
{
|
|
_logger.LogWarning("未找到任何权限");
|
|
return OperationResult<GetAllPermissionsResponse>.CreateSuccess(
|
|
new GetAllPermissionsResponse(
|
|
new List<PermissionListItemDto>(),
|
|
0,
|
|
request.PageNumber,
|
|
request.PageSize
|
|
));
|
|
}
|
|
|
|
// 应用筛选条件
|
|
var filteredPermissions = permissions.AsQueryable();
|
|
|
|
// 关键词搜索
|
|
if (!string.IsNullOrWhiteSpace(request.Keyword))
|
|
{
|
|
filteredPermissions = filteredPermissions.Where(p =>
|
|
p.Name.Contains(request.Keyword) ||
|
|
p.Code.Contains(request.Keyword) ||
|
|
(p.Description != null && p.Description.Contains(request.Keyword))
|
|
);
|
|
}
|
|
|
|
// 启用状态筛选
|
|
if (request.IsEnabled.HasValue)
|
|
{
|
|
filteredPermissions = filteredPermissions.Where(p => p.IsEnabled == request.IsEnabled.Value);
|
|
}
|
|
|
|
// 系统权限筛选
|
|
if (request.IsSystem.HasValue)
|
|
{
|
|
filteredPermissions = filteredPermissions.Where(p => p.IsSystem == request.IsSystem.Value);
|
|
}
|
|
|
|
// 获取总数
|
|
var totalCount = filteredPermissions.Count();
|
|
|
|
// 分页
|
|
var pagedPermissions = filteredPermissions
|
|
.Skip((request.PageNumber - 1) * request.PageSize)
|
|
.Take(request.PageSize)
|
|
.ToList();
|
|
|
|
// 转换为DTO
|
|
var permissionDtos = pagedPermissions.Select(p => new PermissionListItemDto(
|
|
p.Id,
|
|
p.Name,
|
|
p.Code,
|
|
p.Description,
|
|
p.IsEnabled,
|
|
p.IsSystem
|
|
)).ToList();
|
|
|
|
var response = new GetAllPermissionsResponse(
|
|
permissionDtos,
|
|
totalCount,
|
|
request.PageNumber,
|
|
request.PageSize
|
|
);
|
|
|
|
_logger.LogInformation("权限列表获取成功,共 {TotalCount} 条记录,当前页 {PageNumber}/{TotalPages}",
|
|
totalCount, request.PageNumber, response.TotalPages);
|
|
|
|
return OperationResult<GetAllPermissionsResponse>.CreateSuccess(response);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "获取权限列表时发生错误");
|
|
return OperationResult<GetAllPermissionsResponse>.CreateFailure(
|
|
new List<string> { "获取权限列表失败" });
|
|
}
|
|
}
|
|
}
|
|
|