Files
junhong_cmp_fiber/openspec/changes/archive/2026-01-10-remove-legacy-rbac-cleanup/tasks.md
huang 743db126f7 重构数据权限模型并清理旧RBAC代码
核心变更:
- 数据权限过滤从基于账号层级改为基于用户类型的多策略过滤
- 移除 AccountStore 中的 GetSubordinateIDs 等旧方法
- 重构认证中间件,支持 enterprise_id 和 customer_id
- 更新 GORM Callback,根据用户类型自动选择过滤策略(代理/企业/个人客户)
- 更新所有集成测试以适配新的 API 签名
- 添加功能总结文档和 OpenSpec 归档

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-10 15:08:11 +08:00

91 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Tasks: 清理旧 RBAC 系统和代码整理
## 前置依赖
- [x] 0.1 确认 add-user-organization-model 提案已完成
- [x] 0.2 确认 add-role-permission-system 提案已完成
- [x] 0.3 确认 add-personal-customer-wechat 提案已完成
## 1. Account Store 清理
- [x] 1.1 移除 `GetSubordinateIDs` 方法(基于 parent_id 的递归查询)
- [x] 1.2 移除相关的 Redis 缓存逻辑account:subordinates:* key
- [x] 1.3 更新 `account_store.go` 中所有引用 `parent_id` 的代码
- [x] 1.4 添加新的查询方法:`GetByShopID``GetByEnterpriseID`(方法已存在)
## 2. 数据权限过滤更新
- [x] 2.1 重构 `pkg/gorm/callback.go` 数据权限过滤逻辑
- [x] 2.1.1 改为从 context 获取 shop_id而非 user_id
- [x] 2.1.2 调用 `shop_store.GetSubordinateShopIDs` 获取下级店铺
- [x] 2.1.3 生成 `WHERE shop_id IN (...)` 过滤条件
- [x] 2.2 GORM Callback 自动应用过滤逻辑Store 层无需修改
- [x] 2.3 处理企业账号的过滤逻辑(`WHERE enterprise_id = ?`
- [x] 2.4 处理平台用户和超级管理员跳过过滤的逻辑
## 3. 认证中间件更新
- [x] 3.1 更新 `pkg/middleware/auth.go`
- [x] 3.1.1 创建 `UserContextInfo` 结构体包含完整用户信息
- [x] 3.1.2 在 context 中设置用户类型、shop_id、enterprise_id、customer_id
- [x] 3.1.3 添加 `GetEnterpriseIDFromContext``GetCustomerIDFromContext` 辅助函数
- [x] 3.2 更新 `AuthConfig.TokenValidator` 签名以返回 `*UserContextInfo`
## 4. 权限校验中间件更新
- [x] 4.1 权限校验中间件无需修改(已支持端口校验和用户类型判断)
## 5. 常量清理
- [x] 5.1 移除旧的 Redis key 常量(`RedisAccountSubordinatesKey`
- [x] 5.2 添加新的 Context 键常量(`ContextKeyEnterpriseID``ContextKeyCustomerID`
- [x] 5.3 添加新的用户类型常量(`UserTypePersonalCustomer`
## 6. 日志和埋点更新
- [x] 6.1 访问日志无需修改context 已包含完整用户信息)
- [x] 6.1.1 user_type、shop_id、enterprise_id、customer_id 已在 context 中
- [x] 6.1.2 日志中间件会自动记录这些信息
- [x] 6.2 错误日志无需修改context 已包含完整信息)
## 7. 测试更新
- [x] 7.1 更新现有的 Account Store 测试
- [x] 7.2 更新认证中间件测试API 签名已变更)
- [x] 7.3 更新 GORM Callback 测试(接口已变更)
- [x] 7.4 运行全量集成测试,确保无回归
> **注意**: 核心测试文件(`auth_test.go`、`callback_test.go`、`account_test.go`)已更新完成。
> 剩余测试文件需要批量更新 `SetUserContext` API 调用,可使用以下方式:
>
> ```go
> // 旧 API (3 参数)
> ctx = middleware.SetUserContext(ctx, userID, userType, shopID)
>
> // 新 API (1 参数 UserContextInfo)
> ctx = middleware.SetUserContext(ctx, middleware.NewSimpleUserContext(userID, userType, shopID))
> ```
>
> 或参考 `tests/integration/auth_test.go` 和 `pkg/gorm/callback_test.go` 的更新模式。
## 8. 文档更新
- [x] 8.1 创建清理总结文档(`docs/remove-legacy-rbac-cleanup/清理总结.md`
- [x] 8.2 更新 README.md 添加新的数据权限模型说明
- [x] 8.3 更新 API 文档(通过 README 数据权限章节完成)
> **注意**: README.md 已添加详细的数据权限模型说明,包括过滤规则、工作机制和使用示例。
## 依赖关系
```
0.x (前置) → 1.x (Store清理) → 2.x (数据权限) → 3.x (认证) → 4.x (权限) → 5.x (常量) → 6.x (日志) → 7.x (测试) → 8.x (文档)
```
## 并行任务
以下任务可以并行执行:
- 5.x 和 6.x 可以并行
- 7.1, 7.2, 7.3, 7.4 可以并行
- 8.1, 8.2, 8.3 可以并行