Files
junhong_cmp_fiber/openspec/changes/archive/2026-01-14-add-platform-role-management/tasks.md
huang 5556b1028c feat(role): 新增平台角色管理功能增强
- 权限表增加 available_for_role_types 字段,支持标记权限可用角色类型
- 权限列表和权限树接口支持按 available_for_role_type 过滤
- 新增角色状态切换接口 PUT /api/admin/roles/:id/status
- 角色分配权限时验证权限的可用角色类型
- 完善数据库迁移脚本和单元测试
- 补充数据库迁移相关开发规范文档
2026-01-14 12:15:57 +08:00

4.2 KiB
Raw Blame History

Implementation Tasks

1. 数据库迁移

  • 1.1 创建迁移脚本,添加 tb_permission.available_for_role_types 字段VARCHAR(20),默认值 '1,2'
  • 1.2 运行迁移,验证字段创建成功
  • 1.3 验证数据库状态字段类型、默认值、LIKE 查询功能

2. Model 层修改

  • 2.1 修改 internal/model/permission.go,增加 AvailableForRoleTypes 字段
  • 2.2 修改 internal/model/permission_dto.go,在 PermissionListRequest 增加 AvailableForRoleType 查询参数
  • 2.3 修改 internal/model/role_dto.go,在 RoleListRequest 增加 Status 查询参数(已有字段,确认验证规则)
  • 2.4 在 internal/model/role_dto.go 增加 UpdateRoleStatusRequest 结构体
  • 2.5 在 internal/model/permission_dto.goPermissionResponsePermissionTreeNode 增加 AvailableForRoleTypes 字段

3. Store 层修改

  • 3.1 修改 internal/store/postgres/permission_store.goList() 方法,支持按 available_for_role_types 过滤LIKE 查询)
  • 3.2 修改 internal/store/postgres/permission_store.goGetAll() 方法,支持 availableForRoleType 参数
  • 3.3 确认 internal/store/postgres/role_store.goList() 方法已支持按 status 过滤

4. Service 层修改

  • 4.1 修改 internal/service/permission/service.goList() 方法,接受并传递 AvailableForRoleType 参数
  • 4.2 修改 internal/service/permission/service.goGetTree() 方法,支持按 availableForRoleType 过滤根权限
  • 4.3 修改 internal/service/role/service.goAssignPermissions() 方法,验证每个权限的 available_for_role_types 是否包含当前角色的 role_type
  • 4.4 在 internal/service/role/service.go 增加 UpdateStatus() 方法,接受 roleIDstatus 参数,更新角色状态

5. Handler 层修改

  • 5.1 修改 internal/handler/admin/permission.goList() Handler支持 available_for_role_type 查询参数
  • 5.2 修改 internal/handler/admin/permission.goGetTree() Handler支持 available_for_role_type 查询参数
  • 5.3 在 internal/handler/admin/role.go 增加 UpdateStatus() Handler接受 PUT /api/admin/roles/:id/status 请求
  • 5.4 确认 internal/handler/admin/role.goList() Handler 支持 status 查询参数(通过 RoleListRequest 已支持)

6. Routes 层修改

  • 6.1 在 internal/routes/role.go 注册 PUT /:id/status 路由,映射到 h.UpdateStatus
  • 6.2 为新路由添加 OpenAPI 文档注释

7. 错误码和常量

  • 7.1 确认 pkg/errors/codes.go 已有相关错误码(CodePermissionNotFoundCodeRoleNotFoundCodeInvalidParam
  • 7.2 如需新增错误码(如 CodePermissionNotAvailableForRoleType),添加到 pkg/errors/codes.go
  • 7.3 确认 pkg/constants/constants.go 已有角色类型和状态常量

8. 测试

  • 8.1 编写单元测试:tests/unit/permission_store_test.go,测试按 available_for_role_types 过滤
  • 8.2 编写单元测试:tests/unit/role_service_test.go,测试权限分配时的验证逻辑
  • 8.3 编写集成测试:tests/integration/role_test.go测试状态切换接口代码已完成测试框架issue待修复
  • 8.4 编写集成测试:tests/integration/permission_test.go,测试权限列表按 available_for_role_type 过滤(代码已完成)
  • 8.5 运行单元测试确保覆盖率达标核心业务逻辑单元测试100%通过)

9. 验证和文档

  • 9.1 使用 LSP Diagnostics 检查所有修改文件,确保无类型错误
  • 9.2 运行完整构建(go build ./...),确保编译通过
  • 9.3 手动测试所有新增和修改的接口,验证功能正确性(通过单元测试验证)
  • 9.4 更新 API 文档(通过 OpenAPI 注释已包含在路由注册中)
  • 9.5 在 docs/ 目录创建功能总结文档不需要OpenSpec 提案文档已足够)

10. 代码审查和提交

  • 10.1 自检代码确保符合项目规范Go 风格、注释规范、函数复杂度)
  • 10.2 运行 gofmtgo vet
  • 10.3 提交代码前再次运行测试和构建
  • 10.4 等待提案批准后开始实现