Files
leaudit-platform-backend/docs/权限与地区隔离/评查点模块收尾清单.md
T

171 lines
5.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.
# 评查点模块收尾清单
> 适用范围:`evaluation_points` 旧表仍在线、评查点模块已完成 `T5-1 ~ T5-5` 首轮 tenant-first 收口后的最终收尾阶段
> 更新日期:2026-05-21
> 文档定位:明确评查点模块距离“真正摆脱 area 主边界”还差哪些数据库、后端、前端、验收与风险动作。
---
## 1. 当前真实状态
评查点模块当前已经完成的不是“全量终态”,而是第一轮高风险收口:
1. 读链路已经 `tenant_code` 优先
2. 写链路已经 `tenant_code` 优先
3. 共享域 `PUBLIC / PROVINCIAL` 已经开始标准化
4. 主链路角色判定已切到 `data_scope + permission`
5.`area` 仍然是物理表兼容字段,不是最终可删除状态
也就是说:
1. 现在已经能明显降低“写错租户、查错范围”的风险
2. 但还不能说评查点模块已经彻底完成租户化
---
## 2. 收尾目标
评查点模块最终收尾只看 4 个结果:
1. `evaluation_points` 具备真实 `tenant_code`
2. 历史 `area` 已完成可审计回填
3. service 查询与写入不再把 `area` 当主边界
4. `area` 退化为展示/兼容字段,最后可评估下线
---
## 3. 数据库收尾项
### 3.1 必做
1. 给旧表 `evaluation_points` 补:
- `tenant_code VARCHAR(64) NULL`
- `tenant_name VARCHAR(128) NULL`
2. 建索引:
- `idx_evaluation_points_tenant_code`
- `idx_evaluation_points_group_tenant_code`
- 如编码唯一性要按租户收口,再评估 `uq_evaluation_points_tenant_code_code_active`
3. 先不删 `area`
4. 先不加 `NOT NULL`
### 3.2 历史回填规则
统一按下面顺序:
1. 已有合法 `tenant_code` 保留
2. 否则优先按 `sys_tenant_aliases.alias_value -> tenant_code`
3. 否则按 `sys_tenants.tenant_name -> tenant_code`
4. 否则按兼容值兜底:
- `公共` / `default` / 空值 -> `PUBLIC`
- `省级` / `省局` -> `PROVINCIAL`
5. `tenant_name``tenant_code` 一起回填
### 3.3 回填前预检
上线前必须先跑:
1. `area` 值分布统计
2. `area` 无法映射租户编码的残留清单
3. `code` 在跨租户下是否允许重复的预检
4. `公共/省级/省局/default/空值` 数量统计
---
## 4. 后端收尾项
### 4.1 可以在数据库补字段后立即推进
1. `ListPoints` / `GetPoint` 查询彻底改成:
- 先按 `tenant_code`
- `tenant_name/area` 仅在老数据回填不完整时 fallback
2. `CreatePoint` / `UpdatePoint` 默认要求落 `tenant_code/tenant_name`
3. `_evaluation_point_tenant_code_expr()` 可从“兼容表达式”逐步收窄到真实列
4. `_tenant_scope_match_sql()` 的旧中文兼容匹配可以继续缩薄
### 4.2 等历史回填完成后再推进
1. 去掉读链路里对 `公共/default/空值/省局/省级` 的多值 fallback
2. 去掉写链路里 `area` 作为最终归属镜像字段的必要性
3. 评估把 `GetPoint` / `ListPoints` 的共享域判断统一下沉到模块 policy
---
## 5. 前端收尾项
### 5.1 必查
1. 评查点列表页是否还传 `area`
2. 新建/编辑页是否还允许手填地区文本
3. 详情页是否仍以 `area` 为主展示归属
4. 查询缓存 key 是否仍含旧 `area`
### 5.2 目标状态
1. 查询主参数只传 `tenant_code`
2. 展示层显示 `tenant_name`
3. `area` 最多只作为历史记录兼容显示
---
## 6. 验收清单
### 6.1 数据验收
1. `evaluation_points``tenant_code` 非空占比可统计
2. `PUBLIC / PROVINCIAL` 记录数量可统计
3. 未映射记录清单可导出
### 6.2 行为验收
1. 本租户管理员只能看到本租户 + 共享域评查点
2. 本租户管理员不能把评查点改挂到其他租户
3. 全局用户创建非共享评查点,必须显式指定 `tenant_code`
4. 共享域列表读取优先命中标准编码,不再先靠中文值
5. 新建一个自定义租户后,可正常筛选该租户评查点
### 6.3 回归验收
1. 旧数据中 `公共/default/空值` 仍可见
2. 旧数据中 `省级/省局` 仍可见
3. 评查点分组联动不回归
4. 编码唯一性行为不意外变化
---
## 7. 剩余风险
### 高风险
1. 如果数据库不先补 `tenant_code`,代码层再怎么 tenant-first,也只能停留在兼容态
2. 如果历史回填不先跑,查询口径会长期停在“标准编码 + 中文兼容混合”阶段
### 中风险
1. 若前端仍持续提交 `area`,会延长兼容期
2. 若共享域中文常量在别的模块也继续扩散,会影响后续统一执行器接入
### 低风险
1. `tenant_name` 展示名后续调整可能影响少量历史展示,不应影响真实边界
---
## 8. 推荐执行顺序
1. 先执行评查点 `tenant_code` 补字段与历史回填脚本
2. 再做一次评查点接口联调
3. 再收掉 service 内最厚的 `area` fallback
4. 最后把这条链接到统一数据范围执行器
---
## 9. 本轮直接产物
本轮已新增两份配套产物:
1. 本文档:[评查点模块收尾清单.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/评查点模块收尾清单.md)
2. 数据库草案:[schema_evaluation_points_tenant_cleanup.sql](/home/wren-dev/Porject/leaudit-platform/scripts/创建sql/schema_evaluation_points_tenant_cleanup.sql)
3. 执行说明与验证清单:[评查点数据库执行说明与验证SQL.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/评查点数据库执行说明与验证SQL.md)
4. 执行前预检 SQL[precheck_evaluation_points_tenant_cleanup.sql](/home/wren-dev/Porject/leaudit-platform/scripts/创建sql/precheck_evaluation_points_tenant_cleanup.sql)
5. 预检结果判读模板:[评查点预检结果判读模板.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/评查点预检结果判读模板.md)