gongxiangp2/docs/权限组部门身份修复-2026-10-08.md

48 lines
4.0 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.

# 权限组部门身份修复
组织来源为报表库 `hr_groups`,由 `organization-sync` 默认每天上海时间 02:00 同步。
同步以 `sourceDeptId` 更新同一个 `OrganizationUnit.id`,改名、换上级不重建身份;上游删除只下线。
权限组归属由管理员保存的数据库配置决定,不能根据部门名称自动推断。
## 修复
- 部门关联保存 `organizationUnitId` 外键;旧 `departmentPath` 保留为历史快照。
- 权限组页面、按人看权限和鉴权统一使用绑定部门的当前有效路径。
- 花名册中有部门 ID 时,只使用组织数据库解析的当前任职,忽略旧路径快照;一人多部门仍取各任职最近组的并集。
- 移除按名称自动挂接默认组的逻辑;管理页面不再创建默认组或重置组名。
- 无有效身份的历史关联显示“关联已失效”,不参与组鉴权,可按关联记录 ID 精确清理。
- 部门只允许加入一个组,约束由稳定身份的数据库唯一索引保证;并发冲突不会返回假成功。
## 数据迁移与边界
`20261008_permission_group_department_identity` 只回填当前有效且完整路径唯一匹配的部门。
无法证明的历史关联保留为空,不按简称、同名或名称相似度猜测。迁移不修改组里的素材权限或个人成员。
迁移失败时不得部署依赖新字段的应用。
生产只读盘点:17 条关联,16 条精确匹配;1 条为“视觉”组的“效率部(懂业务的技术部)”。
当前组织目录唯一部门为“效率部”,上游 ID `920560736`。
该条已先备份旧记录与目标身份,再修正为当前完整路径;未修改权限勾选或个人成员。
修复后只读复核为 17 条关联、17 条当前有效部门唯一精确匹配、0 条未匹配。
受保护的生产备份位于 `/mnt/PoolOne/apps/youyidian-3d/releases/permission-identity-repair-20261008`,包含 before 与 after JSON,目录权限 0700。
这是让现有版本恢复关联的单条数据修复;稳定部门 ID 的新代码及数据库迁移尚未提交、发布。
`scripts/repair-permission-group-department.mjs` 用明确的关联 ID、当前部门 ID、预期组 ID 和预期旧路径复核。
默认只读预演;`--apply` 必须指定 `--backup-dir`,写前备份,事务内检查身份和记录未变化。
此工具依赖新字段,须在上述数据库迁移完成后使用。
## 验证
覆盖改名与移动、部门下线、旧路径复用、一人多部门、最近上级继承、组冲突与并发、失效关联清理和管理员组名保留。
在独立 PostgreSQL 容器执行迁移 SQL,验证精确回填、歧义与失效保留、唯一约束和外键保护。
相关 12 个测试套件、86 项测试通过;Prisma 生成、客户端校验、类型检查和修改文件 lint 通过。
本地隔离样例完成桌面及 390px 移动端检查,无横向溢出,失效关联提示和按记录 ID 移除正常。
截图位于 `tmp/permission-groups-qa/identity-desktop.png`、`identity-mobile.png`。样例操作没有写入生产数据。
浏览器控制会话恢复后,已补充当前生产版本的登录态界面验收:
- 权限组「视觉」的部门列表显示「效率部」及当前完整路径。
- 按人看权限搜索「魔礼红」,显示「效率部」、部门组「视觉 · 本部门」,个人组为空;与权限组页面一致。
- 桌面及 390px 移动端显示正常,移动端文档宽度与视口均为 390px,无横向溢出。
- 生产截图位于 `tmp/permission-groups-qa/production-efficiency-person-desktop.png`、`production-efficiency-person-mobile.png`;权限组截图为 `browser-control-recovered.png`。
上述结果验证单条生产关联修正的显示结果;未操作权限勾选或个人加组,未以魔礼红身份执行真实下载。
稳定 ID 新代码的生产迁移、部署及上线后的鉴权验收仍待完成。
生产鉴权和界面验收必须在应用上线后按真实数据检查;本地样例验收不能代替生产验收。