feat(admin): 新增管理员角色、账单、订阅、套餐管理功能
- 新增 AdminRolesController 实现角色 CRUD 和权限管理 - 新增 BillingsController 实现账单查询功能 - 新增 SubscriptionsController 实现订阅管理功能 - 新增 TenantPackagesController 实现套餐管理功能 - 新增租户详情、配额使用、账单列表等查询功能 - 新增 TenantPackage、TenantSubscription 等领域实体 - 新增相关枚举:SubscriptionStatus、TenantPackageType 等 - 更新 appsettings 配置文件 - 更新权限授权策略提供者 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
using MediatR;
|
||||
using TakeoutSaaS.Application.Identity.Contracts;
|
||||
using TakeoutSaaS.Application.Identity.Queries;
|
||||
using TakeoutSaaS.Domain.Identity.Enums;
|
||||
using TakeoutSaaS.Domain.Identity.Repositories;
|
||||
using TakeoutSaaS.Shared.Abstractions.Constants;
|
||||
using TakeoutSaaS.Shared.Abstractions.Exceptions;
|
||||
|
||||
namespace TakeoutSaaS.Application.Identity.Handlers;
|
||||
|
||||
/// <summary>
|
||||
/// 获取平台角色权限列表查询处理器。
|
||||
/// </summary>
|
||||
public sealed class GetAdminRolePermissionsQueryHandler(
|
||||
IRoleRepository roleRepository,
|
||||
IRolePermissionRepository rolePermissionRepository,
|
||||
IPermissionRepository permissionRepository)
|
||||
: IRequestHandler<GetAdminRolePermissionsQuery, IReadOnlyList<PermissionDto>>
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public async Task<IReadOnlyList<PermissionDto>> Handle(GetAdminRolePermissionsQuery request, CancellationToken cancellationToken)
|
||||
{
|
||||
// 1. 校验角色存在
|
||||
var role = await roleRepository.FindByIdAsync(PortalType.Admin, null, request.RoleId, cancellationToken)
|
||||
?? throw new BusinessException(ErrorCodes.NotFound, "角色不存在");
|
||||
|
||||
// 2. 查询角色权限关系
|
||||
var rolePermissions = await rolePermissionRepository.GetByRoleIdsAsync(
|
||||
PortalType.Admin,
|
||||
null,
|
||||
[request.RoleId],
|
||||
cancellationToken);
|
||||
|
||||
// 3. 提取权限 ID 集合
|
||||
var permissionIds = rolePermissions.Select(rp => rp.PermissionId).Distinct().ToArray();
|
||||
if (permissionIds.Length == 0)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
// 4. 查询权限详情
|
||||
var permissions = await permissionRepository.GetByIdsAsync(permissionIds, cancellationToken);
|
||||
|
||||
// 5. 映射 DTO
|
||||
return permissions
|
||||
.Select(p => new PermissionDto
|
||||
{
|
||||
Portal = p.Portal,
|
||||
Id = p.Id,
|
||||
ParentId = p.ParentId,
|
||||
SortOrder = p.SortOrder,
|
||||
Type = p.Type,
|
||||
Name = p.Name,
|
||||
Code = p.Code,
|
||||
Description = p.Description
|
||||
})
|
||||
.ToArray();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user