# 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 可以并行
