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>

View File

@@ -39,6 +39,171 @@
},
"Identity": {
"AdminSeed": {
"RoleTemplates": [
{
"TemplateCode": "platform-admin",
"Name": "平台管理员",
"Description": "平台全量权限",
"IsActive": true,
"Permissions": [
"identity:profile:read",
"identity:role:read",
"identity:role:create",
"identity:role:update",
"identity:role:delete",
"identity:role:bind-permission",
"identity:permission:read",
"identity:permission:create",
"identity:permission:update",
"identity:permission:delete",
"role-template:read",
"role-template:create",
"role-template:update",
"role-template:delete",
"tenant:create",
"tenant:read",
"tenant:review",
"tenant:subscription",
"tenant:quota:check",
"tenant-package:read",
"tenant-package:create",
"tenant-package:update",
"tenant-package:delete",
"merchant:create",
"merchant:read",
"merchant:update",
"merchant:delete",
"merchant:review",
"merchant_category:read",
"merchant_category:create",
"merchant_category:update",
"merchant_category:delete",
"store:create",
"store:read",
"store:update",
"store:delete",
"product:create",
"product:read",
"product:update",
"product:delete",
"order:create",
"order:read",
"order:update",
"order:delete",
"payment:create",
"payment:read",
"payment:update",
"payment:delete",
"delivery:create",
"delivery:read",
"delivery:update",
"delivery:delete",
"dictionary:group:read",
"dictionary:group:create",
"dictionary:group:update",
"dictionary:group:delete",
"dictionary:item:create",
"dictionary:item:update",
"dictionary:item:delete",
"system-parameter:create",
"system-parameter:read",
"system-parameter:update",
"system-parameter:delete"
]
},
{
"TemplateCode": "tenant-admin",
"Name": "租户管理员",
"Description": "管理本租户的门店、商品、订单与权限",
"IsActive": true,
"Permissions": [
"identity:profile:read",
"identity:role:read",
"identity:role:create",
"identity:role:update",
"identity:role:delete",
"identity:role:bind-permission",
"identity:permission:read",
"identity:permission:create",
"identity:permission:update",
"identity:permission:delete",
"tenant:read",
"tenant:subscription",
"tenant:quota:check",
"merchant:read",
"merchant:update",
"merchant_category:read",
"merchant_category:create",
"merchant_category:update",
"merchant_category:delete",
"store:create",
"store:read",
"store:update",
"store:delete",
"product:create",
"product:read",
"product:update",
"product:delete",
"order:create",
"order:read",
"order:update",
"delivery:create",
"delivery:read",
"delivery:update",
"payment:create",
"payment:read",
"payment:update",
"dictionary:group:read",
"dictionary:group:create",
"dictionary:group:update",
"dictionary:group:delete",
"dictionary:item:create",
"dictionary:item:update",
"dictionary:item:delete",
"system-parameter:read"
]
},
{
"TemplateCode": "store-manager",
"Name": "店长",
"Description": "负责门店运营与商品、订单管理",
"IsActive": true,
"Permissions": [
"identity:profile:read",
"store:read",
"store:update",
"product:create",
"product:read",
"product:update",
"order:create",
"order:read",
"order:update",
"delivery:read",
"delivery:update",
"payment:read",
"payment:update",
"dictionary:group:read",
"dictionary:item:create",
"dictionary:item:update",
"dictionary:item:delete"
]
},
{
"TemplateCode": "store-staff",
"Name": "店员",
"Description": "处理订单履约与收款查询",
"IsActive": true,
"Permissions": [
"identity:profile:read",
"store:read",
"product:read",
"order:read",
"order:update",
"delivery:read",
"payment:read"
]
}
],
"Users": [
{
"Account": "admin",
@@ -47,17 +212,69 @@
"TenantId": 1000000000001,
"Roles": [ "PlatformAdmin" ],
"Permissions": [
"merchant:*",
"merchant_category:*",
"identity:profile:read",
"identity:role:read",
"identity:role:create",
"identity:role:update",
"identity:role:delete",
"identity:role:bind-permission",
"identity:permission:read",
"identity:permission:create",
"identity:permission:update",
"identity:permission:delete",
"role-template:read",
"role-template:create",
"role-template:update",
"role-template:delete",
"tenant:create",
"tenant:read",
"tenant:review",
"tenant:subscription",
"tenant:quota:check",
"tenant-package:read",
"tenant-package:create",
"tenant-package:update",
"tenant-package:delete",
"merchant:create",
"merchant:read",
"merchant:update",
"merchant:delete",
"merchant:review",
"merchant_category:read",
"merchant_category:create",
"merchant_category:update",
"merchant_category:delete",
"store:*",
"product:*",
"order:*",
"payment:*",
"delivery:*"
"store:create",
"store:read",
"store:update",
"store:delete",
"product:create",
"product:read",
"product:update",
"product:delete",
"order:create",
"order:read",
"order:update",
"order:delete",
"payment:create",
"payment:read",
"payment:update",
"payment:delete",
"delivery:create",
"delivery:read",
"delivery:update",
"delivery:delete",
"dictionary:group:read",
"dictionary:group:create",
"dictionary:group:update",
"dictionary:group:delete",
"dictionary:item:create",
"dictionary:item:update",
"dictionary:item:delete",
"system-parameter:create",
"system-parameter:read",
"system-parameter:update",
"system-parameter:delete"
]
}
]