Files

8.7 KiB

中高低风险修复优化计划

适用范围:leaudit-platform 当前权限、租户、地区隔离、多租户入口模块改造收尾阶段
更新日期:2026-05-20
文档定位:把当前“哪些地方还没收口”转成可执行的风险分级修复计划,作为后续逐步开发、联调、验收的直接依据。


1. 总体原则

本轮改造后续一律按下面 5 条原则推进:

  1. 所有“归属租户”语义统一收口到 tenant_code
  2. tenant_name 只负责展示,不再承担主键语义
  3. area / region / default / 省级 / 公共 只允许存在于兼容层、历史数据清洗层、展示层
  4. 所有 service 内部查询、写入、权限边界判断优先走 tenant_code
  5. 所有角色判断最终要迁到“权限点 + 数据范围 + 租户能力”,不能长期保留 admin/provincial_admin/common/super_admin 业务硬编码

2. 风险分级标准

2.1 高风险

满足任一条件即归为高风险:

  1. 会直接导致“查错数据、落错租户、串版本、越权访问”
  2. 底层数据表没有 tenant_code 主字段,当前仍靠 area/region 做真实过滤
  3. 查询链路和写入链路不一致,容易出现“写到 A,查按 B”
  4. 会影响多个下游模块的主数据域

2.2 中风险

满足任一条件即归为中风险:

  1. 不一定立刻串数据,但会造成前后端边界不一致
  2. 前端仍按旧角色、旧地区字段判断,和后端真实权限模型不一致
  3. 业务能跑,但兼容层和正式模型混用,后续维护成本高且容易继续扩散

2.3 低风险

满足任一条件即归为低风险:

  1. 不直接影响数据正确性与权限边界
  2. 主要影响可维护性、一致性、可理解性、页面上手体验
  3. 适合在主链稳定后统一清理

3. 高风险修复计划

3.1 范围

当前高风险模块如下:

  1. 文档模块 T2
  2. 内部公文模块 T3
  3. 合同模板模块 T6
  4. 系统使用统计模块 T7
  5. 核心业务表 tenant_code 缺失与历史 area/region 主过滤残留

3.2 当前问题

这些模块虽然已经接了 TenantResolver 或兼容入参,但底层仍存在以下问题:

  1. 业务表未落真实 tenant_code
  2. SQL 过滤主条件仍是 region/area
  3. 接口表面支持 tenant_code,但只是转译成中文地区再去查
  4. 历史公共范围仍散落为 default / 公共 / 省级
  5. 统计快照字段还没有完整记录 tenant_code

3.3 修复目标

高风险阶段必须达成:

  1. 核心业务表具备 tenant_code
  2. 列表、详情、上传、删除、运行、版本链、统计聚合统一按 tenant_code
  3. region/area 退化为兼容展示字段
  4. PUBLIC / PROVINCIAL 变成规范租户编码,不再以中文和 default 直接参与 SQL

3.4 执行顺序

H1 数据库主链补齐

目标:

  1. 识别仍缺 tenant_code 的核心业务表
  2. 补字段、索引、必要约束
  3. 设计历史数据回填脚本

优先表:

  1. leaudit_documents
  2. contract_templates
  3. usage_login_events
  4. rag_dataset
  5. rag_chat_app
  6. 评估内部公文相关主表是否需单独补 tenant_code,还是直接复用 leaudit_documents.tenant_code

H2 文档模块收口

目标:

  1. 上传写入 tenant_code
  2. 列表/详情/附件/删除/版本链按 tenant_code 查询
  3. _resolve_document_region 降级为兼容展示方法

H3 内部公文模块收口

目标:

  1. 上传、列表、详情、运行、结果统一基于 tenant_code
  2. 公文版本链、运行链、路径链路不再以 region 作为真实归属键

H4 合同模板模块收口

目标:

  1. 去掉 '' AS tenant_code 这类伪租户返回
  2. 列表、详情、搜索、上传统一改成真实 tenant_code
  3. region 只保留中文展示与兼容输入

当前进展:

  1. 第一轮高风险已完成
  2. 上传权限、列表/详情/搜索 scope、公共/省级查询口径已收口为 tenant_code 优先
  3. 旧数据仍允许按 region 兜底命中,但不再把 region 当新数据真实归属键

H5 统计模块收口

目标:

  1. 登录/上传/运行等事件记录租户快照
  2. 聚合统计按 tenant_code 计算
  3. 页面展示再映射为 tenant_name

3.5 高风险验收标准

  1. 任意核心业务记录都能明确看到 tenant_code
  2. 同名文档、模板、公文在不同租户之间不会串数据
  3. 非本租户用户无法通过列表、详情、附件、运行、统计明细绕过边界
  4. 公共/省级范围由规范租户编码统一表达
  5. 即使 tenant_name 被修改,历史归属和查询边界也不受影响

3.6 高风险阶段不做的事

  1. 不在这个阶段追求完全去掉所有 region/area 字段
  2. 不在这个阶段大面积重构统一权限执行器
  3. 不在这个阶段优先做页面视觉优化

4. 中风险修复计划

4.1 范围

当前中风险模块如下:

  1. T4 RAG 知识库模块
  2. T1 RBAC 管理域剩余角色/范围硬编码
  3. T10 前端菜单、守卫、按钮显隐中的旧角色判断
  4. 交叉评查入口与可见性判断残留的 area/region/provincial_admin 分支

4.2 当前问题

  1. 前后端都还存在“认角色名”的逻辑
  2. RAG 底层还是 area 主模型
  3. 前端可见性和后端鉴权未完全同构
  4. 某些页面已经接了租户接口,但按钮是否显示仍按 admin/provincial_admin

4.3 修复目标

  1. RAG 数据集、应用改用 tenant_code
  2. 前端从“角色名驱动”迁到“权限点 + 能力 + 租户归属”
  3. RBAC 页面中的核心角色保护、系统角色识别改为后端权威字段或配置
  4. 菜单守卫与接口鉴权口径保持一致

4.4 执行顺序

M1 RAG 数据模型和服务收口

目标:

  1. rag_datasetrag_chat_apptenant_code
  2. service 查询、创建、编辑、删除统一按 tenant_code
  3. 公共知识库策略从角色判断改为标准租户能力规则

M2 前端角色硬编码收口

目标:

  1. user-routes
  2. guard
  3. cross-checking-access
  4. role-permissions
  5. contract-template
  6. dify-dataset-manager

统一改成:

  1. 按权限点判断能否访问
  2. 按租户归属判断能否管理
  3. 仅保留极少数系统级保底兼容

M3 RBAC 边界统一

目标:

  1. 系统角色识别不再由前端手工猜
  2. 角色删除保护由后端统一返回是否允许删除
  3. 页面展示不再写死 provincial_admin/admin/common

4.5 中风险验收标准

  1. 自定义角色只要拿到权限,前端就能正确显示入口与按钮
  2. 没有权限时,即使角色名叫 admin 也不能误显示能力
  3. 前端守卫、菜单、按钮显隐与接口 403 结果一致
  4. RAG 不再依赖 area 作为真实归属字段

5. 低风险修复计划

5.1 范围

当前低风险事项如下:

  1. 页面 UI 风格统一
  2. 旧命名清理
  3. 兼容字段对外返回口径统一
  4. 文档导航与开发说明补齐

5.2 当前问题

  1. 租户管理页和角色权限页视觉系统还不完全统一
  2. 前端大量 area-*region-*tenant-* 命名混用
  3. 部分返回结构里主字段和兼容字段同时存在,但优先级不够明确

5.3 修复目标

  1. 租户管理、角色权限、入口模块等后台页风格统一
  2. 新接口主输出统一为 tenant_code / tenant_name
  3. 旧字段仅作为兼容字段保留,并在类型和注释中明确标记
  4. 文档导航和执行进度持续更新

5.4 执行顺序

L1 角色权限页样式统一

目标:

  1. 完成 RolePermissionsClient.tsx 新结构对应 CSS
  2. 与租户管理页保持同一后台设计语言

L2 命名清理

目标:

  1. 新增代码不再出现新的 area-* 命名
  2. area/region 命名逐步迁到 tenant-*

L3 文档与注释补充

目标:

  1. 更新总导航
  2. 更新当前进度
  3. 为新迁移脚本和关键兼容点补说明

5.5 低风险验收标准

  1. 页面风格统一、上手成本降低
  2. 新代码可读性显著提升
  3. 后续开发者能明确知道哪些字段是主字段、哪些只是兼容字段

6. 推荐执行计划

建议按下面顺序推进:

  1. 先完成高风险 H1-H5
  2. 再完成中风险 M1-M3
  3. 最后完成低风险 L1-L3

原因:

  1. 先保数据和边界正确
  2. 再保权限模型一致
  3. 最后做视觉、命名、文档收尾

7. 本轮立即启动项

本轮开始直接执行以下两件事:

  1. 先补“高风险数据库迁移清单”,明确哪些表要加 tenant_code
  2. 然后从 T2/T3/T6 主链开始,把文档、公文、合同模板改成 tenant_code 主过滤

这两步完成后,项目才算真正进入“tenant_code 全链路收口”阶段,而不是继续停留在兼容层阶段。