43 lines
1.5 KiB
C#
43 lines
1.5 KiB
C#
using MediatR;
|
|
using TakeoutSaaS.Application.Identity.Contracts;
|
|
using TakeoutSaaS.Application.Identity.Queries;
|
|
using TakeoutSaaS.Domain.Identity.Repositories;
|
|
using TakeoutSaaS.Shared.Abstractions.Tenancy;
|
|
|
|
namespace TakeoutSaaS.Application.Identity.Handlers;
|
|
|
|
/// <summary>
|
|
/// 按用户 ID 获取权限概览处理器。
|
|
/// </summary>
|
|
public sealed class GetUserPermissionsQueryHandler(
|
|
IIdentityUserRepository identityUserRepository,
|
|
ITenantProvider tenantProvider)
|
|
: IRequestHandler<GetUserPermissionsQuery, UserPermissionDto?>
|
|
{
|
|
private readonly IIdentityUserRepository _identityUserRepository = identityUserRepository;
|
|
private readonly ITenantProvider _tenantProvider = tenantProvider;
|
|
|
|
/// <inheritdoc />
|
|
public async Task<UserPermissionDto?> Handle(GetUserPermissionsQuery request, CancellationToken cancellationToken)
|
|
{
|
|
var tenantId = _tenantProvider.GetCurrentTenantId();
|
|
var user = await _identityUserRepository.FindByIdAsync(request.UserId, cancellationToken);
|
|
if (user == null || user.TenantId != tenantId)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
return new UserPermissionDto
|
|
{
|
|
UserId = user.Id,
|
|
TenantId = user.TenantId,
|
|
MerchantId = user.MerchantId,
|
|
Account = user.Account,
|
|
DisplayName = user.DisplayName,
|
|
Roles = user.Roles,
|
|
Permissions = user.Permissions,
|
|
CreatedAt = user.CreatedAt
|
|
};
|
|
}
|
|
}
|