feat(role): 新增平台角色管理功能增强

- 权限表增加 available_for_role_types 字段,支持标记权限可用角色类型
- 权限列表和权限树接口支持按 available_for_role_type 过滤
- 新增角色状态切换接口 PUT /api/admin/roles/:id/status
- 角色分配权限时验证权限的可用角色类型
- 完善数据库迁移脚本和单元测试
- 补充数据库迁移相关开发规范文档
This commit is contained in:
2026-01-14 12:15:57 +08:00
parent 9c399df6bc
commit 5556b1028c
22 changed files with 1474 additions and 87 deletions

View File

@@ -0,0 +1,55 @@
# Change: 平台角色管理功能增强
## Why
现有的角色管理系统虽然已实现完整的 RBAC 功能,但缺少面向平台管理员的专用角色管理接口。当前接口设计为通用型(同时支持平台角色和客户角色),但在实际使用中,平台管理员主要管理平台角色(用于分配给平台用户),而客户角色的管理需求相对较少且需要单独的权限控制。
此外,权限分配时缺少对"哪些权限可以分配给平台角色"的明确过滤机制,导致在创建角色时可能分配不合适的权限。未来需要提供内部开发人员专用的权限配置接口,用于标记权限的可用角色类型。
## What Changes
- ✅ 扩展 `Permission` 模型,增加 `available_for_role_types` 字段,用于标记权限可分配给哪些角色类型
- ✅ 修改权限列表查询接口,支持按 `available_for_role_type` 过滤
- ✅ 修改权限树查询接口,支持按 `available_for_role_type` 过滤
- ✅ 新增角色状态切换接口:`PUT /api/admin/roles/:id/status`
- ✅ 扩展角色列表查询,支持按 `status` 过滤
- ✅ 更新角色 Service 层,在分配权限时验证权限的 `available_for_role_types`
- ✅ 提供数据库迁移脚本,为现有权限设置默认值 `1,2`(兼容平台角色和客户角色)
**注意**:暂不实现权限配置接口(修改 `available_for_role_types`),该功能仅供内部开发人员手动修改数据库使用。
## Impact
**Affected specs:**
- `role-permission` — 修改权限查询和角色权限分配的需求
**Affected code:**
- `internal/model/permission.go` — 增加 `AvailableForRoleTypes` 字段
- `internal/model/permission_dto.go` — 修改 `PermissionListRequest`,增加 `AvailableForRoleType` 查询参数
- `internal/model/role_dto.go` — 修改 `RoleListRequest`,增加 `Status` 查询参数;增加 `UpdateRoleStatusRequest`
- `internal/store/postgres/permission_store.go` — 修改 `List()``GetAll()` 方法,支持按 `available_for_role_types` 过滤
- `internal/service/permission/service.go` — 修改 `List()``GetTree()` 方法,支持新的过滤参数
- `internal/service/role/service.go` — 修改 `AssignPermissions()` 方法,验证权限的 `available_for_role_types`;增加 `UpdateStatus()` 方法
- `internal/handler/admin/role.go` — 增加 `UpdateStatus()` Handler
- `internal/handler/admin/permission.go` — 修改 `List()``GetTree()` Handler支持新的查询参数
- `internal/routes/role.go` — 注册状态切换路由
- `migrations/` — 增加迁移脚本:添加 `available_for_role_types` 字段
**Breaking changes:**
-
**Database changes:**
```sql
-- 添加 available_for_role_types 字段
ALTER TABLE tb_permission
ADD COLUMN available_for_role_types VARCHAR(20) DEFAULT '1,2'
COMMENT '可用角色类型 1=平台 2=客户';
-- 为现有权限设置默认值(兼容所有角色类型)
UPDATE tb_permission SET available_for_role_types = '1,2' WHERE available_for_role_types IS NULL;
```
**Non-breaking enhancements:**
- 权限列表查询新增可选参数 `available_for_role_type`
- 角色列表查询新增可选参数 `status`
- 新增角色状态切换接口 `PUT /api/admin/roles/:id/status`