- 权限表增加 available_for_role_types 字段,支持标记权限可用角色类型 - 权限列表和权限树接口支持按 available_for_role_type 过滤 - 新增角色状态切换接口 PUT /api/admin/roles/:id/status - 角色分配权限时验证权限的可用角色类型 - 完善数据库迁移脚本和单元测试 - 补充数据库迁移相关开发规范文档
3.2 KiB
3.2 KiB
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查询参数;增加UpdateRoleStatusRequestinternal/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()Handlerinternal/handler/admin/permission.go— 修改List()和GetTree()Handler,支持新的查询参数internal/routes/role.go— 注册状态切换路由migrations/— 增加迁移脚本:添加available_for_role_types字段
Breaking changes:
- 无
Database changes:
-- 添加 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