Files
leaudit-platform-backend/docs/权限与地区隔离/权限与租户改造当前进度总览.md

673 lines
38 KiB
Markdown
Raw Permalink 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.
# 权限与租户改造当前进度总览
> 适用范围:`leaudit-platform` 当前权限、地区隔离、租户化、多租户入口模块改造现状
> 更新日期:2026-05-21
> 文档定位:给当前研发/评审快速判断“已经做到哪里、哪些只是方案、哪些已经进代码/数据库、下一步该做什么”。
> 冻结验收入口:
> - [冻结版进度盘点与最小冒烟验收-2026-05-21.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/冻结版进度盘点与最小冒烟验收-2026-05-21.md)
> - [Pytest全链路验收说明.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/Pytest全链路验收说明.md)
---
## 1. 当前结论
目前这轮改造已经不是纯方案阶段,已经进入:
1. 文档体系基本齐全
2. 数据库租户底座已补齐
3. 登录/当前用户/租户解析/入口模块读取链路,已经有第一轮兼容代码
4. `RBAC` 用户租户设置与首页入口显示,已经完成真实联调修复
5. `RBAC` 管理域与交叉评查任务建单入口,已完成一轮 tenant-first 高风险边界收口
6. 统一权限执行器、统一数据范围收口、角色去硬编码全域治理,还没有完成
换句话说:
- `租户主数据底座 + 兼容层`:已开始落地
- `入口模块租户化`:已部分落地,首页读链路已打通
- `RBAC 用户租户维护`:已完成首轮接口与前端联调
- `RBAC/CrossReview 高风险边界`:已完成首轮 tenant-first 收口
- `权限统一执行器`:仍主要停留在设计和骨架层
- `业务模块全量 scope 化`:仅零散改动,未形成统一闭环
- `前端去角色化`:未系统完成
补充一个必须纠偏的认知:
- `评查点/评查组` 当前不能再被简单理解成老 `evaluation_points` 主表治理问题
- 新平台真实运行主链路,已经转为 `入口模块 -> 一级业务大类 -> 二级业务子类型 -> 规则集 -> YAML 规则版本 -> 文档评查结果`
-`/api/v3/evaluation-points` 与老评查点页面,只能视为兼容链路,不再是新平台主模型
对应专项文档:
- [新平台评查点与评查组真实模型梳理.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/新平台评查点与评查组真实模型梳理.md)
---
## 2. 文档层进度
## 2.1 已完成的核心文档
`docs/权限与地区隔离/` 下当前已具备以下主文档:
1. 架构总方案
- [权限架构全面优化改造方案.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/权限架构全面优化改造方案.md)
2. 现行权限模型
- [用户与地区权限完整设计方案.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/用户与地区权限完整设计方案.md)
- [用户权限与权限点清单.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/用户权限与权限点清单.md)
3. 统一执行器设计
- [统一数据范围执行器设计.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/统一数据范围执行器设计.md)
- [统一执行器落地代码骨架与接入示例.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/统一执行器落地代码骨架与接入示例.md)
4. 接口/SQL/测试/排期
- [权限接口矩阵与数据边界清单.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/权限接口矩阵与数据边界清单.md)
- [权限字段映射与SQL改造规范.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/权限字段映射与SQL改造规范.md)
- [权限测试验收与回归用例清单.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/权限测试验收与回归用例清单.md)
- [权限改造实施任务拆解与排期.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/权限改造实施任务拆解与排期.md)
5. 角色去硬编码专题
- [角色硬编码与接口影响专项补充分析.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/角色硬编码与接口影响专项补充分析.md)
- [角色去硬编码迁移清单.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/角色去硬编码迁移清单.md)
6. 地区租户化/多租户专题
- [地区租户化与自定义租户扩展改造方案.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/地区租户化与自定义租户扩展改造方案.md)
- [租户主数据模型设计.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/租户主数据模型设计.md)
- [权限、租户能力与数据范围职责边界说明.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/权限、租户能力与数据范围职责边界说明.md)
- [地区到租户编码映射清洗清单.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/地区到租户编码映射清洗清单.md)
- [入口模块租户配置表迁移方案.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/入口模块租户配置表迁移方案.md)
- [自定义租户功能连带影响深度补充.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/自定义租户功能连带影响深度补充.md)
结论:
- 文档覆盖面已经够全
- 现在缺的不是“再补大方向设计稿”
- 现在更缺“按文档逐步落代码、落表、落验证”
## 2.2 文档导航状态
当前存在两套导航:
1. 新总导航
- [权限文档总导航与阅读顺序.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/权限文档总导航与阅读顺序.md)
2. 旧导航
- [权限与地区隔离文档导航.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/权限与地区隔离文档导航.md)
其中旧导航仍保留了这类旧口径:
- 只做 `RBAC + 单地区数据隔离`
- 用户地区只认 `sso_users.area`
- 角色主线只保留 `provincial_admin/admin/common`
这和当前已经推进的“地区租户化、tenant_code、租户主数据、入口模块租户映射”方向已经不一致。
结论:
- 旧导航不能再作为现行总入口
- 后续阅读应以 [权限文档总导航与阅读顺序.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/权限文档总导航与阅读顺序.md) 为准
补充一个当前必须单列的新专题:
- [规则域多租户方案A实施计划.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/规则域多租户方案A实施计划.md)
这个文档的作用不是重复讲租户大方向,而是专门收口:
1. 新平台规则配置
2. 评查组与规则绑定
3. 规则集与规则版本
4. 评查运行结果链路
它已经明确把规则域定案为:
1. 共享业务树
2. 租户规则绑定
3. `TENANT -> PROVINCIAL -> PUBLIC` 生效顺序
4. 运行结果快照 tenant-first
当前规则域代码进度已推进到:
1. 读侧 tenant-first 已完成
2. 规则组绑定写侧 tenant 化已完成
3. 规则配置来源态字段已完成
4. 规则版本 lineage 快照已完成第一轮
5. 剩余主要是新库执行迁移 SQL 与前端来源态联调
---
## 3. 数据库层进度
## 3.1 已完成
数据库底座已经补齐并执行过:
1. [schema_tenant_foundation.sql](/home/wren-dev/Porject/leaudit-platform/scripts/创建sql/schema_tenant_foundation.sql)
2. [schema_entry_module_tenants.sql](/home/wren-dev/Porject/leaudit-platform/scripts/创建sql/schema_entry_module_tenants.sql)
已落地对象包括:
1. `sys_tenants`
2. `sys_tenant_aliases`
3. `sys_tenant_feature_flags`
4. `leaudit_entry_module_tenants`
5. `sso_users.tenant_code`
同时已做过:
1. 基础租户种子数据初始化
2. 历史 `area -> tenant_code` 回填
3. 入口模块旧 `areas` JSON 到租户关系表的初始化迁移
## 3.2 当前意义
这一步很关键,因为它说明当前系统已经不再只是“设计租户化”,而是数据库已经具备:
1. 租户主数据查询基础
2. 历史地区别名兼容基础
3. 功能级租户启用开关基础
4. 入口模块按租户配置的关系化基础
## 3.3 仍未完成
数据库层目前仍不是“全量租户化完毕”,主要还差:
1. 更多业务表是否需要补 `tenant_code`
2. 历史 `area/region/default/省级/空值` 残留数据的全量清洗
3. 其他模块是否仍只靠中文地区名落库/查询
4. 更完整的租户写接口与后台维护能力
---
## 4. 代码层进度
## 4.1 已明确落地的后端能力
当前已经落地了一批“租户兼容层”代码,不再只是文档:
1. 统一租户解析器
- [tenantResolver.py](/home/wren-dev/Porject/leaudit-platform/fastapi_modules/fastapi_leaudit/services/impl/tenantResolver.py)
2.`sso_users` 结构兼容
- [ssoUserCompat.py](/home/wren-dev/Porject/leaudit-platform/fastapi_modules/fastapi_leaudit/services/impl/ssoUserCompat.py)
3. 租户主数据服务
- [tenantServiceImpl.py](/home/wren-dev/Porject/leaudit-platform/fastapi_modules/fastapi_leaudit/services/impl/tenantServiceImpl.py)
4. 租户接口控制器
- [tenantController.py](/home/wren-dev/Porject/leaudit-platform/fastapi_modules/fastapi_leaudit/controllers/tenantController.py)
5. 登录/当前用户租户解析接入
- [authServiceImpl.py](/home/wren-dev/Porject/leaudit-platform/fastapi_modules/fastapi_leaudit/services/impl/authServiceImpl.py)
6. 首页入口模块按租户过滤读取
- [homeServiceImpl.py](/home/wren-dev/Porject/leaudit-platform/fastapi_modules/fastapi_leaudit/services/impl/homeServiceImpl.py)
7. 入口模块管理页租户化读写兼容
- [entryModuleAdminServiceImpl.py](/home/wren-dev/Porject/leaudit-platform/fastapi_modules/fastapi_leaudit/services/impl/entryModuleAdminServiceImpl.py)
8. `RBAC` 用户租户设置能力与首轮 scope 收口
- [rbacAdminServiceImpl.py](/home/wren-dev/Porject/leaudit-platform/fastapi_modules/fastapi_leaudit/services/impl/rbacAdminServiceImpl.py)
- [rbacAdminController.py](/home/wren-dev/Porject/leaudit-platform/fastapi_modules/fastapi_leaudit/controllers/rbacAdminController.py)
9. 交叉评查任务建单租户边界收口
- [crossReviewServiceImpl.py](/home/wren-dev/Porject/leaudit-platform/fastapi_modules/fastapi_leaudit/services/impl/crossReviewServiceImpl.py)
10. 首页入口前端兼容修复
- [home.ts](/home/wren-dev/Porject/leaudit-platform/legal-platform-frontend/lib/api/legacy/home/home.ts)
- [minimal-scope.ts](/home/wren-dev/Porject/leaudit-platform/legal-platform-frontend/lib/config/minimal-scope.ts)
11. 发布级 `pytest` 黑盒验收基座
- [tests/release/conftest.py](/home/wren-dev/Porject/leaudit-platform/tests/release/conftest.py)
- [tests/release/test_g1_rbac_context.py](/home/wren-dev/Porject/leaudit-platform/tests/release/test_g1_rbac_context.py)
- [tests/release/test_g2_g3_tenant_entry_chain.py](/home/wren-dev/Porject/leaudit-platform/tests/release/test_g2_g3_tenant_entry_chain.py)
- [tests/release/test_role_tenant_matrix.py](/home/wren-dev/Porject/leaudit-platform/tests/release/test_role_tenant_matrix.py)
- [tests/release/test_g4_documents.py](/home/wren-dev/Porject/leaudit-platform/tests/release/test_g4_documents.py)
- [tests/release/test_g5_rag.py](/home/wren-dev/Porject/leaudit-platform/tests/release/test_g5_rag.py)
- [tests/release/test_g5_rule_cross_review_matrix.py](/home/wren-dev/Porject/leaudit-platform/tests/release/test_g5_rule_cross_review_matrix.py)
## 4.2 当前已经解决了什么
这些代码至少已经开始处理下面几类真实问题:
1. 旧环境 `sso_users` 没有 `tenant_code` 时,避免直接 SQL 崩溃
2. 旧环境没有 `sys_tenants/sys_tenant_aliases/leaudit_entry_module_tenants` 时,服务层可降级
3. 登录返回和当前用户接口,开始统一产出 `tenant_code/tenant_name/tenant_type`
4. 首页入口模块和后台入口模块管理,开始从“按 areas JSON”过渡到“按租户关系表”
5. `RBAC` 用户已可通过标准接口设置 `tenant_code`
6. 首页入口前端已兼容识别 `route_path / routePath / target_path / targetPath / path`
7. 入口模块管理端列表/详情接口已收口为 `tenants` 主输出,不再对管理端返回 `areas`
8. 首页交叉评查入口判断已切到 `tenants` 优先,首页后端租户过滤已收紧过宽 fallback
9. `T8 首页入口 + 入口模块后台收口` 已可视为完成
10. 租户页与角色权限页的职责边界已补专项文档,后续实现统一按“权限管人、租户能力管挂载、数据范围管边界”收口
11. `RBAC` 组织树节点已改为 `tenant_code` 优先分组,目标用户角色查询/分配已补跨租户拦截
12. `CrossReview` 创建任务前的“成员用户 + 任务文档”校验已改为 `tenant_code` 优先,旧 `area/region` 仅作兼容回退
13. `T5 评查点` 首轮已切到 `tenant_code` 优先读取/写入,旧 `area` 仅在遗留表无字段时兼容回退
14. `CrossReview` 已补“单任务不得混挂多租户成员/文档”约束,补传文档开始按任务真实挂载内容反推租户边界
15. `CrossReview` 任务列表已开始同时返回标准化 `evaluationTenants`,前端仍保留 `evaluationRegion` 兼容消费
16. `T5-1 评查点读链路` 已完成:当前用户租户上下文与显式筛选租户条件已拆分,读范围判断不再互相污染
17. `T5-2 评查点写链路` 已完成第一轮:创建/更新不再把原始 `area` 文本直接作为归属主语义,统一从解析后的 `writable_scope` 写入 `area/tenant_code/tenant_name`
18. `T5-2 评查点写链路` 已完成第一轮:`PUBLIC/PROVINCIAL``公共/省级/default` 共享域写入已统一归一化到标准租户编码,未显式指定归属范围的全局写入会被直接拒绝
19. `T5-3 评查点读链路` 已完成第一轮:共享域筛选已优先按 `PUBLIC/PROVINCIAL` 匹配,旧 `公共/default/空值/省局/省级` 仅作为无 `tenant_code` 历史数据 fallback
20. `T5-4 评查点角色判定` 已完成第一轮:主链路的全局/管理能力已改为 `roles.data_scope + evaluation_point:*` 权限推断,不再直接硬编码 `super_admin/provincial_admin/admin`
21. `T5-5 评查点 fallback 收口` 已完成第一轮:查不到数据库用户上下文时,已移除 `payload.user_role` 角色名兜底;fallback 默认不再推断全局范围
22. 发布门禁 `G1-G3` 已不再只靠人工回放,已沉淀为可重复执行 `pytest` 黑盒验收
23. 多租户、多角色的基础矩阵验收已落地,可直接验证:
- 全局管理员跨租户查询
- 租户管理员本租户范围限制
- 普通用户管理面 `403` 与业务入口可见性
24. `tenantServiceImpl` 的租户 alias 重复更新 `500` 已修复,租户更新写链路幂等性补齐了一处高频故障点
25. `Document` 主链路已通过发布级黑盒验收:
- 上传、列表、详情、更新、附件追加、删除均已验证租户边界
- `mergeMode=new` 附件追加的当前真实行为已确认为“生成新版本”
26. `RAG` 第一轮黑盒验收已完成:
- 本租户与公共应用可见性边界已验证
- 数据集详情读取边界已验证
- 当前权限种子下,数据集管理接口仍偏全局管理员模型,这一现实已被测试固化
27. `规则集 / 评查组 / 交叉评查` 第一轮黑盒验收已完成:
- 规则集元数据全局可读
- 规则绑定与评查组树按入口模块租户映射过滤
- 交叉评查任务建单已验证“成员/文档不得混租户”
### 4.2.2 新平台主链路本轮新增进度
围绕新平台真实主链路 `入口模块 -> 一级业务大类 -> 二级业务子类型 -> 规则集 -> 规则版本 -> 文档评查结果`,本轮又补了 3 个高风险收口点:
1. `T4 规则控制器鉴权` 已落代码
- [ruleController.py](/home/wren-dev/Porject/leaudit-platform/fastapi_modules/fastapi_leaudit/controllers/ruleController.py)
- 已补 `verify_access_token`
- 已补 `PermissionServiceImpl`
- 权限键已严格对齐 `scripts/创建sql/user_rbac_seed.sql` 中现有 `rules:*` 种子
- `CreateRuleVersion / Publish / Rollback` 的操作人已改为只认当前 token 用户,不再信任前端 body 传入用户ID
2. `T1 上传显式 tenant_code` 已落代码
- [FilesUploadClient.tsx](/home/wren-dev/Porject/leaudit-platform/legal-platform-frontend/app/(audit)/files/upload/FilesUploadClient.tsx)
- [files-upload.ts](/home/wren-dev/Porject/leaudit-platform/legal-platform-frontend/lib/api/legacy/files/files-upload.ts)
- 上传前端已开始同时传 `tenant_code + region`
- 其中 `tenant_code` 作为主边界,`region` 仅保留给旧链路兼容展示与后端兼容解析
3. `T2 文档 tenant/region 混用收口` 已完成第一轮
- [documentServiceImpl.py](/home/wren-dev/Porject/leaudit-platform/fastapi_modules/fastapi_leaudit/services/impl/documentServiceImpl.py)
- `_document_tenant_filter_sql` 已去掉“`tenant_code` 非空时仍放宽匹配空 `tenant_code + region`”逻辑
- `_find_latest_version_candidate` 已去掉“有正式 `tenant_code` 仍可把历史空租户同 region 文档并入版本链”的放宽分支
- 当前版本归并边界已经收紧为:
-`tenant_code`:只认同编码文档
-`tenant_code`:才允许按 `region` 兼容命中历史空租户数据
4. `T3 评查组/规则绑定租户边界` 已完成第一轮
- [evaluationPointGroupController.py](/home/wren-dev/Porject/leaudit-platform/fastapi_modules/fastapi_leaudit/controllers/evaluationPointGroupController.py)
- [evaluationPointGroupService.py](/home/wren-dev/Porject/leaudit-platform/fastapi_modules/fastapi_leaudit/services/evaluationPointGroupService.py)
- [evaluationPointGroupServiceImpl.py](/home/wren-dev/Porject/leaudit-platform/fastapi_modules/fastapi_leaudit/services/impl/evaluationPointGroupServiceImpl.py)
- [ruleController.py](/home/wren-dev/Porject/leaudit-platform/fastapi_modules/fastapi_leaudit/controllers/ruleController.py)
- [ruleService.py](/home/wren-dev/Porject/leaudit-platform/fastapi_modules/fastapi_leaudit/services/ruleService.py)
- [ruleServiceImpl.py](/home/wren-dev/Porject/leaudit-platform/fastapi_modules/fastapi_leaudit/services/impl/ruleServiceImpl.py)
- `evaluation-point-groups` 全部 controller -> service 入口已显式传入 `CurrentUserId`
- `evaluationPointGroupServiceImpl` 已补“当前用户租户上下文 -> 可访问 entry_module -> 可访问 group/binding”的第一轮统一收口
- `ListGroups / ListAllGroups / ListGroupsByDocumentTypes / GetGroup / GetChildren` 已按 `entry_module -> leaudit_entry_module_tenants` 过滤
- `Create/Update/Delete/Rebind/Batch*``CreateBinding/UpdateBinding/DeleteBinding/GetRuleTemplate/CreateRuleDraft` 已补当前租户可访问性校验
- `ruleServiceImpl` 当前只对 `ListBindings/CreateBinding/UpdateBinding/DeleteBinding` 四个绑定面接口补租户收口,仍未把 `ListSets/GetVersions/GetContent` 这种全局规则资产接口租户化
5. `T3-1 rule-groups SSR 缓存串租户风险` 已完成修补
- [page.tsx](/home/wren-dev/Porject/leaudit-platform/legal-platform-frontend/app/(audit)/rule-groups/page.tsx)
- 进程级 `__ruleGroupsTreeCache__` 已从单桶改为按 token 分桶
- 后端开启按租户收口后,不再把 A 租户分组树缓存直接复用于 B 租户 SSR 请求
这一轮的定位不是“把整条新平台主链路全部租户化完成”,而是先收掉 3 个最危险问题:
1. 规则管理接口裸奔无鉴权
2. 上传链路不显式提交 `tenant_code`
3. 文档与历史版本归并仍可能因为 `region` fallback 错并到错误租户
4. 评查组/规则绑定仍可跨入口模块查看和写入
5. `rule-groups` SSR 缓存可能跨租户串数据
### 4.2.3 新平台主链路当前仍未完成的点
截至本轮,以下问题仍然存在,且属于后续优先级较高的剩余项:
1. `ruleServiceImpl` / `ruleGroupSupport.py` 仍以全局规则集与分组关系为主,未形成真正的“规则集/版本资产级”租户边界
2. `evaluationPointGroupServiceImpl` 当前第一轮收口完全依赖 `entry_module -> leaudit_entry_module_tenants`;历史未绑定 `entry_module` 的脏数据,对非全局用户会直接不可见,仍需专项清洗
3. 文档列表/详情虽然已开始 tenant-first,但部分链路仍保留 `region` 兼容消费,需要继续审计调用点是否会把展示值误当边界键
4. 首页入口、上传页、文档列表页前端 scope 仍有 `sessionStorage + documentTypeIds + selectedModuleId` 主导的旧思路,尚未做到“显式 tenant scope 全链路透传”
5. 旧兼容评查点链路与新平台主链路之间的权限/租户语义还没有彻底拆开
6. 规则域多租户仍未整体完成,数据库脚本已准备但尚未在新库执行,当前只完成“方案 A 定案 + 第一轮运行链路 + 只读侧最小落地”
7. `T11-R1/R4` 已开始首轮落地:
- 已新增规则域迁移 SQL
- [schema_rule_domain_tenant_phase1.sql](/home/wren-dev/Porject/leaudit-platform/scripts/创建sql/schema_rule_domain_tenant_phase1.sql)
- [precheck_rule_domain_tenant_phase1.sql](/home/wren-dev/Porject/leaudit-platform/scripts/创建sql/precheck_rule_domain_tenant_phase1.sql)
- [verify_rule_domain_tenant_phase1.sql](/home/wren-dev/Porject/leaudit-platform/scripts/创建sql/verify_rule_domain_tenant_phase1.sql)
- `auditServiceImpl` 已接入 `TENANT -> PROVINCIAL -> PUBLIC` 的最小运行时选择逻辑
- `storage_adapter` 已支持结果/错误/指标写入租户快照字段的兼容模式
- `ruleServiceImpl / ruleConfigServiceImpl` 已完成第一轮只读侧租户作用域接入:
- `ListSets / GetVersions / GetContent` 已支持按当前用户 `tenant_code` 解析有效规则集
- `ruleConfig``ListPacks / ListPackSummaries / GetPack` 已支持按当前用户命中有效绑定
- 规则配置摘要缓存已按用户维度隔离,避免串租户
- `ruleServiceImpl` 已完成第一轮写侧收口:
- `CreateVersion` 已接入当前用户租户上下文,不再默认全局命中 `rule_type -> rule_set`
- `Publish / Rollback` 已增加“当前租户可写规则集”校验,避免跨租户切换生效链
- 当前仍未进入规则派生复制完整闭环、业务组绑定写侧租户化、前端“来源态展示”的阶段
### 4.2.1 评查点模块状态纠偏
这里需要单独说明,避免后续继续按错方向推进:
1. 当前仓库里确实还保留旧评查点链路
- `EvaluationPointController`
- `EvaluationPointServiceImpl`
- 前端 `rules/list``rules/new`
- 后端仍连老库 `docauditai.evaluation_points`
2. 但新平台真实主链路已经不是这套
- 前端 `rule-groups`
- 后端 `evaluationPointGroupServiceImpl`
- `leaudit_evaluation_point_groups`
- `leaudit_rule_group_bindings`
- `leaudit_rule_sets`
- `leaudit_rule_versions`
- `leaudit_documents.group_id`
3. 因此前面 `T5 评查点` 的第一轮改动,只能定义为:
- “旧兼容评查点链路的 tenant-first 收口”
- 不能定义为“新平台评查点主链路改造完成”
当前正确判断应该是:
- `T5-legacy`:旧评查点兼容链路已做首轮 tenant-first 收口
- `T5-main`:新平台评查组/规则集主链路的租户边界、权限边界、数据范围边界,还需要重新单列分析和排期
当前这部分已经不再是“待分析”状态,而是:
- 已完成单列方案定案
- 已形成专项实施计划
- 下一步应直接按 [规则域多租户方案A实施计划.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/规则域多租户方案A实施计划.md) 执行
## 4.4 最近一次真实联调结论
本轮已用真实接口和真实前端链路验证通过:
1. `000 / admin06111` 可登录后端和前端
2. `PUT /api/v3/rbac/users/5/tenant` 可成功更新用户租户
3. `/api/auth/me` 已能返回正确 `tenant_code=MZ`
4. 后端 `/api/home/entry-modules``000` 实际返回 5 个入口模块
5. 前端此前“首页无入口”的根因不是后端过滤,而是首页兼容层只认 `route_path`
6. 修复前端兼容层后,`/api/auth/session-data` 已真实返回 `entryModules=5`
因此当前关于“000 用户首页没入口”这一问题,已经不是待分析状态,而是已修复并已验证状态。
## 4.3 当前还不能说“已完成”的部分
虽然代码有落地,但整体仍不能算改造完成,原因是:
1. 统一权限决策模型还没成为全项目公共底座
2. `Document/Govdoc/UsageStats/RAG/RBAC` 还没全量切到统一执行器
3. 角色硬编码还存在于多个 controller/service/前端 guard
4. 现在很多地方是“兼容层 + fallback”,不是最终收口态
## 4.4 高风险第一批最新进展
当前已正式开始按“高风险优先”执行,不再停留在方案阶段。
本轮已新增并推进:
1. [中高低风险修复优化计划.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/中高低风险修复优化计划.md)
2. [高风险数据库迁移清单与执行顺序.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/高风险数据库迁移清单与执行顺序.md)
3. [schema_tenant_code_high_risk_phase1.sql](/home/wren-dev/Porject/leaudit-platform/scripts/创建sql/schema_tenant_code_high_risk_phase1.sql)
其中已经实际落地的第一批代码变更包括:
1. 合同模板服务已从“接口表面支持 `tenant_code`、实际按 `region` 查”推进到“写入真实 `tenant_code/tenant_name`,查询优先 `tenant_code`,旧数据按 `region` 兼容回退”
2. 合同模板上传去重已从 `region + template_code` 收口为“优先 `tenant_code + template_code`,旧数据兼容 `region`
3. 合同模板列表、详情返回已不再伪造空 `tenant_code`
4. 高风险 SQL 迁移脚本已从不安全的多匹配回填写法,修正为“按主键逐表稳定回填”的确定性写法
5. 评查点模块已补专用数据库草案:
- [schema_evaluation_points_tenant_cleanup.sql](/home/wren-dev/Porject/leaudit-platform/scripts/创建sql/schema_evaluation_points_tenant_cleanup.sql)
6. 评查点模块已补专用收尾文档:
- [评查点模块收尾清单.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/评查点模块收尾清单.md)
7. 评查点模块已补执行前预检与执行说明:
- [precheck_evaluation_points_tenant_cleanup.sql](/home/wren-dev/Porject/leaudit-platform/scripts/创建sql/precheck_evaluation_points_tenant_cleanup.sql)
- [评查点数据库执行说明与验证SQL.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/评查点数据库执行说明与验证SQL.md)
8. 评查点模块已补预检结果判读模板:
- [评查点预检结果判读模板.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/评查点预检结果判读模板.md)
这意味着:
- `T6 合同模板模块` 已完成第一轮高风险 tenant-first 收口
- `schema_tenant_code_high_risk_phase1.sql` 已具备进入数据库执行评审的基础
- `T5 旧评查点兼容链路` 已进入“代码首轮收口完成,待决定是否继续兼容 / 迁移 / 只读化”的阶段
- `T5 新平台评查组主链路` 不能再按“给 `evaluation_points` 补字段”推进,需改按新模型重新拆租户边界
- 下一步应继续推进 `RBAC 管理域 scope 化` 与剩余业务派生查询的统一执行器接入
---
## 5. 按实施排期对照当前状态
以 [权限改造实施任务拆解与排期.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/权限改造实施任务拆解与排期.md) 为基线,当前大致进度如下。
## 5.1 P1 能力层建设
状态:`未完成`
判断依据:
1. 文档里定义了 `ScopeContext / PermissionGrant / PermissionDecision / ScopeClause`
2. 但当前代码里还没有形成稳定、统一、被各模块复用的完整执行器主链
3. 现有改动以租户兼容和入口模块租户过滤为主,不是统一权限执行器成型
结论:
- `P1` 仍处于“设计已完成,工程底座未完整落地”
## 5.2 P2 RAG 双轨治理
状态:`进行中`
判断依据:
1. 当前已实际落地 `rag_dataset / rag_chat_app``tenant_code` 字段兼容补齐与索引补齐
2. 数据集后台创建、更新、删除、列表、详情已经改为 `tenant_code` 优先,`area` 退为兼容展示/回退
3. 数据集可见性与聊天应用可见性已开始按 `tenant_code + PUBLIC/PROVINCIAL + public dataset` 收口
4. 前端 `/api/v3/dify/area-datasets*` 代理链路已改为 `tenant_code` 优先,知识库配置页已接入真实租户选项源,不再只靠已有知识库反推地区列表
5. service 内部大部分显式 `provincial_admin/admin/super_admin` 白名单已移除,但统一 `permission + decision + policy` 公共执行器仍未彻底接入
结论:
- `P2` 已从“仅触达代码”进入“后端主链已收口一轮、前端管理链路已改 tenant_code 优先、首轮黑盒已完成”的阶段
- 但当前黑盒也明确暴露出一个现实:`RAG` 管理接口在现有权限种子下仍主要由全局管理员持有
- 剩余重点在于:
1. 更深层文档/分段/检索派生接口的统一策略收口
2. 会话写链路与消息链路补测
3. 前端页面彻底去 `area` 命名心智
4. 统一执行器正式接入 `RagPolicy`
## 5.3 P3 文档、公文、统计接入
状态:`部分完成`
判断依据:
1. 这些文件目前有修改痕迹:
- `documentServiceImpl.py`
- `govdocServiceImpl.py`
- `usageStatsServiceImpl.py`
2. 其中 `usageStatsServiceImpl.py` 已完成一轮真实租户收口:
- 登录审计补 `tenant_code_snapshot / tenant_name_snapshot`
- 用户、文档、审计聚合查询改为 `tenant_code` 优先
- `GetUsers/GetAreas/GetDetails` 的跨租户统计串数问题已修正
3. `Document/Govdoc` 已完成第一轮高风险 tenant-first 收口,但尚未全部统一接入一套执行器
4. 当前更需要防范“半改状态”,因为最容易出现范围判断不一致
结论:
- `P3` 不能整体宣称完成
-`T7 使用统计` 可以视为本轮已完成
- `Document` 主链路已从“第一轮代码收口”进入“发布级黑盒已验证”的阶段
- `Govdoc/合同模板` 仍未进入同等强度的黑盒验收
- `Document/Govdoc` 后续重点转向统一执行器接入、剩余派生查询复核与验收
## 5.4 P4 RBAC、合同模板、首页接入
状态:`部分进行中`
判断依据:
1. 首页相关租户读取逻辑已开始落地,且前端首页兼容层问题已修复
2. `rbacAdminServiceImpl.py``rbacAdminController.py` 已新增用户租户设置链路并完成联调
3. `RBAC` 组织树、目标用户角色分配/查询已完成一轮 tenant-first 收口
4. `contractTemplateServiceImpl.py` 第一轮高风险已完成,但还没接入统一策略闭环
5. 还没形成“统一策略 + 统一范围判定”的闭环
结论:
- `P4` 中的“RBAC 首轮租户设置能力”“RBAC 首轮 scope 收口”和“首页入口可见性修复”已落地
- `P4` 中的“合同模板统一策略接入”和“RBAC policy 化”仍需继续推进
## 5.5 P5 前端去角色化与验收收口
状态:`基本未完成`
判断依据:
1. 前端目录有租户 API 接入痕迹
2. 但没有证据表明菜单、按钮、guard 已系统改成按权限/能力快照
3. 验收矩阵文档虽已写完,自动化和完整联调未见闭环
---
## 6. 当前最真实的完成度分层
如果按“真实可用进度”划分,当前可以这样看:
## 6.1 已完成
1. 权限与租户改造文档体系
2. 租户主数据基础表与入口模块租户关系表建表脚本
3. 目标库 schema 执行与基础数据初始化
4. `sso_users.tenant_code` 字段补齐与历史回填
5. `RBAC` 用户租户设置接口与前端弹窗联调
6. 首页入口前端标准化兼容修复
## 6.2 已落地但属于第一轮兼容
1. 登录/当前用户租户解析
2. 租户解析器与旧字段兼容
3. 租户选项服务 fallback
4. 首页入口模块读链路租户过滤
5. 后台入口模块读写链路租户关系表兼容
6. 首页前端会话聚合链路兼容 `targetPath/routePath`
7. 入口模块管理端消费层已完成 tenants 化,首页链路保留 `areas` 仅作兼容展示
8. 首页入口主判断链路已改为 `tenants` 优先,`areas` 已退为兼容展示
## 6.3 正在改但还不能验收
1. RAG
2. 文档的派生链路
3. 公文
4. RBAC 管理域全量 scope 化
5. 合同模板
6. 交叉评查任务与文档关系链统一策略接入
补充说明:
1. `统计` 已从“正在改”转为“本轮后端收口已完成,待后续统一执行器接入时再做第二轮整合”
2. `RAG` 当前属于“后端主链 + 前端管理链路第一轮完成,且首轮黑盒验收已完成;但还未做最终权限模型收口”
3. `文档/公文` 当前属于“文档主链路黑盒已通过;公文与更多派生链路尚未完成统一执行器接入与全链路回归”
4. `RBAC` 当前属于“用户租户设置 + 用户列表/组织树/角色分配第一轮 tenant-first 已完成;但 policy 化和统一执行器未完成”
5. `CrossReview` 当前属于“任务建单入口高风险边界已收口且首轮黑盒已验证;但任务详情、关系列表、后续动作链路尚未统一 policy”
## 6.4 仍未系统展开
1. 全局统一权限执行器正式接入
2. 全模块去角色硬编码
3. 前端去角色化
4. 多业务表租户字段标准化
5. 交叉评查/评查点等剩余 tenant-name 边界残留收口
6. 回归用例逐条落测
## 6.5 当前黑盒验收基线
截至 2026-05-21,发布级黑盒验收基线已经扩展为 `16 passed`
这 16 条通过目前表达的是:
1. `G1-G3` 门禁链路已经稳定
2. `G4` 文档跨租户读写边界已被可重复执行测试固定
3. `G5` RAG 当前真实权限模型已被固定
4. `G6` 规则集/评查组只读矩阵与交叉评查建单边界已被固定
同时也要明确:
1. 这不代表所有设计稿都已实现
2. 这不代表规则资产已经完全租户化
3. 这不代表 `RAG` 已经完全去角色化
4. 这不代表交叉评查后续深链路已经验收完成
---
## 7. 当前主要风险
## 7.1 文档口径和代码口径并存
风险点:
旧导航还在强调“只认 `area`、单地区隔离”,会误导后续开发继续写旧逻辑。
## 7.2 代码处于半改状态
风险点:
有些链路已经开始认 `tenant_code`,有些链路仍认 `area/region/default`,很容易出现:
1. 查得到列表,查不到详情
2. 登录后有租户,实际查询仍按旧地区字段
3. 新入口模块配置了租户,但其他下游仍用旧 JSON 或旧地区名
## 7.3 统一执行器未成型前,范围逻辑容易继续分叉
风险点:
如果继续一口气在各模块手写过滤,很可能又会堆出第二套、第三套范围判断。
## 7.4 租户接口虽然有代码,但还要看联通性
当前已存在 [tenantController.py](/home/wren-dev/Porject/leaudit-platform/fastapi_modules/fastapi_leaudit/controllers/tenantController.py),控制器扫描注册机制也支持自动注册。
但仍需联调确认:
1. `/api/v3/tenants`
2. `/api/v3/tenants/options`
3. `/api/v3/tenants/{tenantCode}`
是否都已真实可用并满足前端需要。
---
## 8. 下一步建议顺序
基于当前状态,后续不建议再先写大而全新方案,而应按下面顺序推进:
1. 进入 `T9` 租户主数据维护写能力
- 补租户新增、编辑、启停、别名、feature flag 管理接口
2. 再做“剩余高风险残留扫描”
- 重点扫 `region/area/default/省级/省局` 是否仍会导致落错数据或查错范围
3. 然后按主数据风险顺序推进业务模块
- 交叉评查后续关系链
- 评查点配置
- RBAC policy 化
- 文档/公文剩余派生查询与统一执行器接入
- RAG 二轮收口
4. 最后再进入统一执行器全量收口和前端去角色化
---
## 9. 建议你现在把它理解成什么阶段
最准确的描述是:
“权限与租户改造已经完成方案设计和第一批数据库/兼容层落地,当前处于从兼容接入向统一执行器正式收口过渡的中间阶段。”
补充一句更贴近当前真实状态的话:
“入口模块首页可见性和 RBAC 用户租户维护已经打通,但业务主数据域仍大量停留在 `area/region` 兼容阶段。”
不是:
- 还停留在纸面方案
也不是:
- 已经完成全量权限租户化改造
---
## 10. 当前阅读建议
如果你现在只想判断“接下来该盯哪里”,建议直接看这几份:
1. [权限与租户改造当前进度总览.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/权限与租户改造当前进度总览.md)
2. [权限改造实施任务拆解与排期.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/权限改造实施任务拆解与排期.md)
3. [地区租户化与自定义租户扩展改造方案.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/地区租户化与自定义租户扩展改造方案.md)
4. [入口模块租户配置表迁移方案.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/入口模块租户配置表迁移方案.md)
5. [模块级开发任务单.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/模块级开发任务单.md)
如果你要判断“某个模块现在到底能不能继续开发”,再回头对照:
1. [权限接口矩阵与数据边界清单.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/权限接口矩阵与数据边界清单.md)
2. [角色去硬编码迁移清单.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/角色去硬编码迁移清单.md)
3. [模块级真实落地清单与下一步动作.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/模块级真实落地清单与下一步动作.md)