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

3.6 KiB
Raw Blame History

Tasks: 清理旧 RBAC 系统和代码整理

前置依赖

  • 0.1 确认 add-user-organization-model 提案已完成
  • 0.2 确认 add-role-permission-system 提案已完成
  • 0.3 确认 add-personal-customer-wechat 提案已完成

1. Account Store 清理

  • 1.1 移除 GetSubordinateIDs 方法(基于 parent_id 的递归查询)
  • 1.2 移除相关的 Redis 缓存逻辑account:subordinates:* key
  • 1.3 更新 account_store.go 中所有引用 parent_id 的代码
  • 1.4 添加新的查询方法:GetByShopIDGetByEnterpriseID(方法已存在)

2. 数据权限过滤更新

  • 2.1 重构 pkg/gorm/callback.go 数据权限过滤逻辑
    • 2.1.1 改为从 context 获取 shop_id而非 user_id
    • 2.1.2 调用 shop_store.GetSubordinateShopIDs 获取下级店铺
    • 2.1.3 生成 WHERE shop_id IN (...) 过滤条件
  • 2.2 GORM Callback 自动应用过滤逻辑Store 层无需修改
  • 2.3 处理企业账号的过滤逻辑(WHERE enterprise_id = ?
  • 2.4 处理平台用户和超级管理员跳过过滤的逻辑

3. 认证中间件更新

  • 3.1 更新 pkg/middleware/auth.go
    • 3.1.1 创建 UserContextInfo 结构体包含完整用户信息
    • 3.1.2 在 context 中设置用户类型、shop_id、enterprise_id、customer_id
    • 3.1.3 添加 GetEnterpriseIDFromContextGetCustomerIDFromContext 辅助函数
  • 3.2 更新 AuthConfig.TokenValidator 签名以返回 *UserContextInfo

4. 权限校验中间件更新

  • 4.1 权限校验中间件无需修改(已支持端口校验和用户类型判断)

5. 常量清理

  • 5.1 移除旧的 Redis key 常量(RedisAccountSubordinatesKey
  • 5.2 添加新的 Context 键常量(ContextKeyEnterpriseIDContextKeyCustomerID
  • 5.3 添加新的用户类型常量(UserTypePersonalCustomer

6. 日志和埋点更新

  • 6.1 访问日志无需修改context 已包含完整用户信息)
    • 6.1.1 user_type、shop_id、enterprise_id、customer_id 已在 context 中
    • 6.1.2 日志中间件会自动记录这些信息
  • 6.2 错误日志无需修改context 已包含完整信息)

7. 测试更新

  • 7.1 更新现有的 Account Store 测试
  • 7.2 更新认证中间件测试API 签名已变更)
  • 7.3 更新 GORM Callback 测试(接口已变更)
  • 7.4 运行全量集成测试,确保无回归

注意: 核心测试文件(auth_test.gocallback_test.goaccount_test.go)已更新完成。 剩余测试文件需要批量更新 SetUserContext API 调用,可使用以下方式:

// 旧 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.gopkg/gorm/callback_test.go 的更新模式。

8. 文档更新

  • 8.1 创建清理总结文档(docs/remove-legacy-rbac-cleanup/清理总结.md
  • 8.2 更新 README.md 添加新的数据权限模型说明
  • 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 可以并行