673 lines
38 KiB
Markdown
673 lines
38 KiB
Markdown
# 权限与租户改造当前进度总览
|
||
|
||
> 适用范围:`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)
|