using MediatR; using TakeoutSaaS.Application.Identity.Commands; using TakeoutSaaS.Domain.Identity.Repositories; using TakeoutSaaS.Shared.Abstractions.Tenancy; namespace TakeoutSaaS.Application.Identity.Handlers; /// /// 绑定角色权限处理器。 /// public sealed class BindRolePermissionsCommandHandler( IRolePermissionRepository rolePermissionRepository, ITenantProvider tenantProvider) : IRequestHandler { /// /// 处理角色权限绑定请求。 /// /// 绑定命令。 /// 取消标记。 /// 执行结果。 public async Task Handle(BindRolePermissionsCommand request, CancellationToken cancellationToken) { // 1. 获取租户上下文 var tenantId = request.TenantId ?? tenantProvider.GetCurrentTenantId(); // 2. 覆盖式绑定权限 var distinctPermissionIds = request.PermissionIds .Where(id => id > 0) .Distinct() .ToArray(); await rolePermissionRepository.ReplaceRolePermissionsAsync(tenantId, request.RoleId, distinctPermissionIds, cancellationToken); await rolePermissionRepository.SaveChangesAsync(cancellationToken); // 3. 返回执行结果 return true; } }