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.

76 lines
2.8 KiB

using MediatR;
using CellularManagement.Domain.Repositories;
using Microsoft.Extensions.Logging;
using CellularManagement.Domain.Common;
using System.Threading.Tasks;
using System.Threading;
using System;
using System.Linq;
namespace CellularManagement.Application.Features.RolePermissions.Commands.AddRolePermissions;
/// <summary>
/// 添加角色权限命令处理器
/// </summary>
public class AddRolePermissionsCommandHandler : IRequestHandler<AddRolePermissionsCommand, OperationResult<AddRolePermissionsResponse>>
{
private readonly IRolePermissionRepository _rolePermissionRepository;
private readonly ILogger<AddRolePermissionsCommandHandler> _logger;
public AddRolePermissionsCommandHandler(
IRolePermissionRepository rolePermissionRepository,
ILogger<AddRolePermissionsCommandHandler> logger)
{
_rolePermissionRepository = rolePermissionRepository;
_logger = logger;
}
public async Task<OperationResult<AddRolePermissionsResponse>> Handle(
AddRolePermissionsCommand request,
CancellationToken cancellationToken)
{
try
{
// 获取角色当前已有的权限
var existingPermissions = await _rolePermissionRepository.GetPermissionsByRoleIdAsync(request.RoleId, cancellationToken);
var existingPermissionIds = existingPermissions.Select(p => p.Id).ToList();
// 过滤出需要新增的权限ID
var newPermissionIds = request.PermissionIds.Except(existingPermissionIds).ToList();
if (!newPermissionIds.Any())
{
return OperationResult<AddRolePermissionsResponse>.CreateFailure("所有权限已存在,无需添加");
}
// 添加新的角色权限
var addedRolePermissions = await _rolePermissionRepository.AddRolePermissionsAsync(
request.RoleId,
newPermissionIds,
cancellationToken);
var response = new AddRolePermissionsResponse
{
AddedPermissionIds = newPermissionIds,
FailedPermissionIds = request.PermissionIds.Except(newPermissionIds)
};
_logger.LogInformation(
"成功为角色 {RoleId} 添加 {Count} 个权限",
request.RoleId,
newPermissionIds.Count);
return OperationResult<AddRolePermissionsResponse>.CreateSuccess(response);
}
catch (Exception ex)
{
_logger.LogError(
ex,
"为角色 {RoleId} 添加权限时发生错误",
request.RoleId);
return OperationResult<AddRolePermissionsResponse>.CreateFailure(
"添加角色权限失败,请稍后重试");
}
}
}