build-flow.api/src/modules/rag/Application/Roles/Handlers/AssignPermissionsCommandHandler.cs
xiangning 17b7e9996e chore(dependencies): 移除未使用的 using 语句
- 从多个文件中移除未使用的 System.Linq.Dynamic.Core 引用
- 从多个文件中移除未使用的 Microsoft.EntityFrameworkCore 引用
- 从 IM 模块中移除未使用的 MongoDB.Driver.Linq 引用
- 清理 Handler 文件中的冗余命名空间引用
- 优化代码结构减少不必要的依赖引入
- 提高代码整洁性和编译效率
2026-07-02 14:53:56 +08:00

35 lines
1.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using BuildFlow.Shared.Domain.Exceptions;
using MediatR;
using BuildFlow.Application.Roles.DTOs;
using BuildFlow.Domain.Entities;
using BuildFlow.Infrastructure.Persistence;
using BuildFlow.Application.Roles.Commands;
namespace BuildFlow.Application.Roles.Handlers;
/// <summary>
/// Assign权限sCommand处理器。执行业务校验后持久化。
/// </summary>
public class AssignPermissionsCommandHandler(RagDbContext db) : IRequestHandler<AssignPermissionsCommand, RoleDto>
{
public async Task<RoleDto> Handle(AssignPermissionsCommand request, CancellationToken ct)
{
var role = await db.Roles.Include(r => r.RolePermissions).ThenInclude(rp => rp.Permission)
.FirstOrDefaultAsync(r => r.Id == request.RoleId, ct)
?? throw new NotFoundException("角色不存在");
var permissions = await db.Permissions.Where(p => request.PermissionIds.Contains(p.Id)).ToListAsync(ct);
// 计数校验:查回的数量必须与请求数量一致,否则说明传入含无效 Id,拒绝执行以免权限静默丢失
if (permissions.Count != request.PermissionIds.Count)
throw new NotFoundException("部分权限不存在");
db.RolePermissions.RemoveRange(role.RolePermissions);
await db.RolePermissions.AddRangeAsync(
permissions.Select(p => new RolePermission { RoleId = role.Id, PermissionId = p.Id }), ct);
await db.SaveChangesAsync(ct);
return new RoleDto(role.Id, role.Name, role.Description, role.CreatedAt,
permissions.Select(p => p.Code).ToList());
}
}