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
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(
|
|
"添加角色权限失败,请稍后重试");
|
|
}
|
|
}
|
|
}
|