Files
platforms/docs/操作日志_工作人员资质关联修复_20260811.md
czl231 74c5e34275 修复工作人员资质关联与角色过滤
按安装、配送、运维菜单显式过滤工作人员,锁定资质所有者并使用姓名和角色回显。

扩展工作人员状态与多角色查询,补充权限校验、回归测试、操作日志和项目文档。
2026-08-11 19:15:53 +08:00

72 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.
# 工作人员资质关联修复操作日志
操作时间2026-08-11 18:28:22
操作类型:修改、扩展
影响模块:平台总后台工作人员资质、订单分配、用户服务关系、平台工作人员列表接口
## 操作前状态
- 平台前端只要加载 `/staff_account` 关联选项,就会无条件附加 `role_code=delivery`
- 从安装人员或运维人员页面进入资质新建页时,预填 UUID 无法在配送人员选项中匹配,选择器只能显示裸 UUID。
- 资质新建页仍允许更换工作人员,可能破坏“指定人员下的资质管理”上下文。
- `owner_name` 来自 URL缺少服务端人员详情校验直接访问、角色变化和归档人员没有统一阻断规则。
- 工作人员列表接口只支持单一 `role_code`,不能表达“全部角色中的启用人员”或“启用且在岗的配送人员”。
## 具体操作
- 新增工作人员关系策略:
- 人员资质按来源菜单角色查询,并锁定已预填人员。
- 订单分配只查询启用且在岗的配送人员。
- 用户服务关系查询安装、配送、运维三类启用人员。
- 未声明策略的工作人员关联立即报错,不再继承隐含默认值。
- 新增资质来源校验:
- 显式传递 `staff_type`,并允许从安全站内 `return_to` 回退解析。
- 始终按 UUID 查询服务端人员详情,不信任 `owner_name`
- 人员缺失、归档、无权访问或真实角色与来源冲突时阻止创建。
- 优化人员展示:主值显示“姓名(角色)”,资质页 UUID 作为次要可复制信息;详情与表单都会按当前值补载关系记录,避免分页筛选后退化成裸标识。
- 扩展工作人员列表接口:新增可选 `role_codes``status``work_status` 参数;保留原 `role_code` 和无过滤查询兼容性。
- 扩展平台访问控制:多角色查询要求调用账号拥有每一种目标角色对应的菜单权限;订单菜单仍仅可查询配送人员。
- 增加前后端回归测试和前端策略检查命令。
## 操作后状态
- 安装人员资质新建页能够稳定显示“曹(安装人员)”,人员控件不可修改。
- 页面只显示可复制的唯一标识尾号,不再把完整 UUID 当作人员名称候选项。
- 无人员/角色来源的直接新建地址显示“无法执行此操作”,不渲染可保存表单。
- 角色冲突不会静默改绑;用户需要从工作人员当前角色菜单重新进入。
- 三个工作人员关联场景各自拥有明确的角色、启用状态和在岗状态契约。
- 后端仍以真实工作人员记录和菜单权限作为最终鉴权依据,前端查询参数不能扩大权限。
## 代码变更
- `frontend/platform_admin/src/api/resource-staff-relation.ts`:新增角色闭集、字段过滤、返回路径解析和资质所有者校验。
- `frontend/platform_admin/src/api/resources.ts`:为三种工作人员关联字段声明独立策略,并兼容扩展关系字段构造函数。
- `frontend/platform_admin/src/views/resource/use-resource-relations.ts`:删除全局配送人员特例,按字段加载/搜索并补载当前关系值。
- `frontend/platform_admin/src/views/resource/ResourceRecordPage.vue`:接入资质人员服务端校验、锁定和异常阻断。
- `frontend/platform_admin/src/views/resource/use-staff-credential-owner-guard.ts`:拆分资质所有者回查、角色校验与错误结果。
- `frontend/platform_admin/src/views/resource/load-resource-record-relations.ts`:拆分关系补载与动态平台角色加载,控制主页面文件规模。
- `frontend/platform_admin/src/views/resource/ResourceFieldForm.vue``ResourceDetailContent.vue``resource-display.ts`:展示人员姓名、角色和可复制标识。
- `frontend/platform_admin/src/views/shared/CrudListPage.vue`:在工作人员、资质列表及记录页面之间传递 `staff_type`
- `backend/api/internal/logic/platform/staff/staff.go`:解析并应用角色、状态和工作状态过滤。
- `backend/api/internal/logic/platform/platform/access.go`:校验单角色和多角色工作人员查询权限。
- `backend/api/internal/logic/platform/staff/staff_test.go``platform/access_test.go`:覆盖过滤闭集和访问控制。
- `frontend/platform_admin/scripts/check-staff-relation-policy.mjs``package.json`:新增前端关系策略回归检查。
## 验证结果
- `npm.cmd run type:check`:通过。
- `npm.cmd run staff-relations:check`:通过。
- `npm.cmd run build`通过Vite 生产构建完成。
- `go test ./internal/logic/platform/staff ./internal/logic/platform/platform`:通过。
- `go test ./internal/logic/platform/...`:通过。
- 本地浏览器只读验证:安装人员名称和角色正确回显,人员控件禁用,唯一标识可复制;直接访问缺少上下文时正确阻断;未提交测试数据。
- `git diff --check`:通过。
## 风险评估
- 多角色工作人员查询采用严格权限交集:调用账号必须同时拥有安装、配送和运维人员菜单权限;权限不足时服务端拒绝整次查询,避免返回部分结果造成误解。
- 关系下拉仍以每次最多 100 条加载并支持关键字搜索;已保存或预填人员会按 UUID 独立补载。
- 资质编辑和详情按工作人员当前角色鉴权;角色变更不会删除历史资质,但旧角色来源的新建上下文会被阻断。
- 本次不修改数据库结构、资质归属关系或工作人员角色变更规则,不触碰现有运行日志和 `runtime/` 数据。
- `ResourceRecordPage.vue` 原本已超过 500 行;本次把新增校验和关系加载职责拆到两个独立文件,将主文件由实施中峰值 588 行降至 522 行,未继续重构既有保存和状态流程以控制改动范围。