Files
junhong_cmp_fiber/openspec/specs/legacy-cleanup/spec.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

74 lines
2.7 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.
# legacy-cleanup Specification
## Purpose
TBD - created by archiving change remove-legacy-rbac-cleanup. Update Purpose after archive.
## Requirements
### Requirement: 基于店铺的数据权限过滤
系统 SHALL 在 Store 层的 List 方法中自动应用基于店铺的数据权限过滤:代理账号只能查询自己店铺及下级店铺的数据。
#### Scenario: 代理账号查询数据
- **WHEN** 代理账号user_type=3shop_id=X查询业务数据列表
- **THEN** 系统自动添加 WHERE 条件:`shop_id IN (X, 及X的所有下级店铺ID)`
#### Scenario: 企业账号查询数据
- **WHEN** 企业账号user_type=4enterprise_id=Y查询业务数据列表
- **THEN** 系统自动添加 WHERE 条件:`enterprise_id = Y`
#### Scenario: 平台用户跳过过滤
- **WHEN** 平台用户user_type=1 或 2查询业务数据列表
- **THEN** 系统不添加任何过滤条件,返回所有数据
#### Scenario: C端用户跳过过滤
- **WHEN** context 中包含 SkipOwnerFilter 标记C端用户
- **THEN** 系统跳过 shop_id/enterprise_id 过滤,由业务代码自行处理
---
### Requirement: 认证中间件适配新用户体系
系统 SHALL 更新认证中间件以支持新的用户类型和组织关联,在 context 中正确设置用户信息。
#### Scenario: B端用户认证
- **WHEN** B端 Token 验证成功
- **THEN** 中间件在 context 中设置user_id、user_type、shop_id代理或 enterprise_id企业
#### Scenario: C端用户认证
- **WHEN** C端 Token 验证成功
- **THEN** 中间件在 context 中设置customer_id、SkipOwnerFilter=true
#### Scenario: Token类型不匹配
- **WHEN** C端 Token 访问 /api/v1/ 或 B端 Token 访问 /api/c/
- **THEN** 中间件返回 401 Unauthorized
---
### Requirement: 权限校验适配新体系
系统 SHALL 更新权限校验中间件以支持角色类型匹配和权限端口校验。
#### Scenario: 权限端口校验
- **WHEN** 用户访问权限保护的接口
- **THEN** 中间件检查用户权限的 platform 字段是否与请求来源匹配
#### Scenario: 超级管理员跳过权限
- **WHEN** 超级管理员user_type=1访问任意接口
- **THEN** 中间件跳过权限校验,允许访问
---
### Requirement: 访问日志记录新字段
系统 SHALL 在访问日志中记录新的用户体系字段,便于问题排查和数据分析。
#### Scenario: B端用户访问日志
- **WHEN** B端用户发起 HTTP 请求
- **THEN** 访问日志包含字段user_id、user_type、shop_id或 enterprise_id
#### Scenario: C端用户访问日志
- **WHEN** C端用户发起 HTTP 请求
- **THEN** 访问日志包含字段customer_id、标记为 C 端用户
---