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

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

5.7 KiB
Raw Blame History

工作人员资质关联修复操作日志

操作时间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_codesstatuswork_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.vueResourceDetailContent.vueresource-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.goplatform/access_test.go:覆盖过滤闭集和访问控制。
  • frontend/platform_admin/scripts/check-staff-relation-policy.mjspackage.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 行,未继续重构既有保存和状态流程以控制改动范围。