feat: 角色模板改为数据库管理支持前端自定义

This commit is contained in:
2025-12-03 20:38:26 +08:00
parent 19137f3cf7
commit 6a84141799
28 changed files with 901 additions and 652 deletions

View File

@@ -30,9 +30,9 @@ public sealed class RolesController(IMediator mediator) : BaseApiController
[HttpGet("templates")]
[PermissionAuthorize("identity:role:read")]
[ProducesResponseType(typeof(ApiResponse<IReadOnlyList<RoleTemplateDto>>), StatusCodes.Status200OK)]
public async Task<ApiResponse<IReadOnlyList<RoleTemplateDto>>> ListTemplates(CancellationToken cancellationToken)
public async Task<ApiResponse<IReadOnlyList<RoleTemplateDto>>> ListTemplates([FromQuery] bool? isActive, CancellationToken cancellationToken)
{
var result = await mediator.Send(new ListRoleTemplatesQuery(), cancellationToken);
var result = await mediator.Send(new ListRoleTemplatesQuery { IsActive = isActive }, cancellationToken);
return ApiResponse<IReadOnlyList<RoleTemplateDto>>.Ok(result);
}
@@ -54,6 +54,49 @@ public sealed class RolesController(IMediator mediator) : BaseApiController
: ApiResponse<RoleTemplateDto>.Ok(result);
}
/// <summary>
/// 创建角色模板。
/// </summary>
[HttpPost("templates")]
[PermissionAuthorize("role-template:create")]
[ProducesResponseType(typeof(ApiResponse<RoleTemplateDto>), StatusCodes.Status200OK)]
public async Task<ApiResponse<RoleTemplateDto>> CreateTemplate([FromBody, Required] CreateRoleTemplateCommand command, CancellationToken cancellationToken)
{
var result = await mediator.Send(command, cancellationToken);
return ApiResponse<RoleTemplateDto>.Ok(result);
}
/// <summary>
/// 更新角色模板。
/// </summary>
[HttpPut("templates/{templateCode}")]
[PermissionAuthorize("role-template:update")]
[ProducesResponseType(typeof(ApiResponse<RoleTemplateDto>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ApiResponse<RoleTemplateDto>), StatusCodes.Status404NotFound)]
public async Task<ApiResponse<RoleTemplateDto>> UpdateTemplate(
string templateCode,
[FromBody, Required] UpdateRoleTemplateCommand command,
CancellationToken cancellationToken)
{
command = command with { TemplateCode = templateCode };
var result = await mediator.Send(command, cancellationToken);
return result is null
? ApiResponse<RoleTemplateDto>.Error(StatusCodes.Status404NotFound, "角色模板不存在")
: ApiResponse<RoleTemplateDto>.Ok(result);
}
/// <summary>
/// 删除角色模板。
/// </summary>
[HttpDelete("templates/{templateCode}")]
[PermissionAuthorize("role-template:delete")]
[ProducesResponseType(typeof(ApiResponse<bool>), StatusCodes.Status200OK)]
public async Task<ApiResponse<bool>> DeleteTemplate(string templateCode, CancellationToken cancellationToken)
{
var result = await mediator.Send(new DeleteRoleTemplateCommand { TemplateCode = templateCode }, cancellationToken);
return ApiResponse<bool>.Ok(result);
}
/// <summary>
/// 按模板复制角色并绑定权限。
/// </summary>