- 权限表增加 available_for_role_types 字段,支持标记权限可用角色类型 - 权限列表和权限树接口支持按 available_for_role_type 过滤 - 新增角色状态切换接口 PUT /api/admin/roles/:id/status - 角色分配权限时验证权限的可用角色类型 - 完善数据库迁移脚本和单元测试 - 补充数据库迁移相关开发规范文档
4.2 KiB
4.2 KiB
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.go的PermissionResponse和PermissionTreeNode增加AvailableForRoleTypes字段
3. Store 层修改
- 3.1 修改
internal/store/postgres/permission_store.go的List()方法,支持按available_for_role_types过滤(LIKE 查询) - 3.2 修改
internal/store/postgres/permission_store.go的GetAll()方法,支持availableForRoleType参数 - 3.3 确认
internal/store/postgres/role_store.go的List()方法已支持按status过滤
4. Service 层修改
- 4.1 修改
internal/service/permission/service.go的List()方法,接受并传递AvailableForRoleType参数 - 4.2 修改
internal/service/permission/service.go的GetTree()方法,支持按availableForRoleType过滤根权限 - 4.3 修改
internal/service/role/service.go的AssignPermissions()方法,验证每个权限的available_for_role_types是否包含当前角色的role_type - 4.4 在
internal/service/role/service.go增加UpdateStatus()方法,接受roleID和status参数,更新角色状态
5. Handler 层修改
- 5.1 修改
internal/handler/admin/permission.go的List()Handler,支持available_for_role_type查询参数 - 5.2 修改
internal/handler/admin/permission.go的GetTree()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.go的List()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已有相关错误码(CodePermissionNotFound、CodeRoleNotFound、CodeInvalidParam) - 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 运行
gofmt和go vet - 10.3 提交代码前再次运行测试和构建
- 10.4 等待提案批准后开始实现