feat(access): 新增售后角色及退货模块权限账号 #341

Open
opened 2026-09-27 10:08:39 +08:00 by ila · 6 comments
Owner

需求与范围

在本地和线上 GoAuto Admin 中新增“售后”角色及四个售后账号。

实施范围

  • 新增角色“售后”,权限基于现有“采购”角色;
  • 在采购角色已有权限基础上,追加“退货同步”和“退货商品”两个模块的查看与使用权限;
  • 创建账号:zengyt、huangyj、zhuyt、wangxy;
  • 初始密码按用户授权设置为统一初始密码,密码不得写入代码、日志或工单正文;
  • 本地数据库和线上数据库均执行同等权限与账号写入;
  • 写入必须幂等:重复执行不创建重复角色、菜单权限或用户;已有账号不得被覆盖或重置密码,除非明确确认;
  • 不修改管理员、采购员及其他角色的现有权限。

验收标准

  1. 售后角色存在,采购模块权限保持一致,并拥有退货同步、退货商品模块权限;
  2. 四个账号存在且关联售后角色;
  3. 重复执行不会产生重复账号、角色或权限关联;
  4. 售后账号无法访问未授权模块;
  5. 本地和线上均完成验证;
  6. 不输出密码、Token、Cookie 或完整生产数据。

风险与验证

这是权限和账号写入操作,执行前需备份/确认数据库连接,执行后验证登录、菜单和接口权限。工单保持待验收。

## 需求与范围 在本地和线上 GoAuto Admin 中新增“售后”角色及四个售后账号。 ## 实施范围 - 新增角色“售后”,权限基于现有“采购”角色; - 在采购角色已有权限基础上,追加“退货同步”和“退货商品”两个模块的查看与使用权限; - 创建账号:`zengyt`、`huangyj`、`zhuyt`、`wangxy`; - 初始密码按用户授权设置为统一初始密码,密码不得写入代码、日志或工单正文; - 本地数据库和线上数据库均执行同等权限与账号写入; - 写入必须幂等:重复执行不创建重复角色、菜单权限或用户;已有账号不得被覆盖或重置密码,除非明确确认; - 不修改管理员、采购员及其他角色的现有权限。 ## 验收标准 1. 售后角色存在,采购模块权限保持一致,并拥有退货同步、退货商品模块权限; 2. 四个账号存在且关联售后角色; 3. 重复执行不会产生重复账号、角色或权限关联; 4. 售后账号无法访问未授权模块; 5. 本地和线上均完成验证; 6. 不输出密码、Token、Cookie 或完整生产数据。 ## 风险与验证 这是权限和账号写入操作,执行前需备份/确认数据库连接,执行后验证登录、菜单和接口权限。工单保持待验收。
Author
Owner

实施完成,待验收。

  • 代码:17cbfaec85833bfd549570371a72422dc339b34a,已合并并推送 main。
  • 迁移:新增 1789801100000_after_sales_role.go,使用部署进程环境变量临时注入初始密码,源码、日志和工单未记录明文。
  • 本地:迁移新增 1 个版本;角色 after_sales、四个账号、15 个菜单绑定和 82 条 Casbin 策略已回读;重复迁移为 0 个新增。
  • 线上:迁移新增 1 个版本;systemd goauto.service 重启后为 active;重复迁移为 0 个新增;外部 / 和 /api/v1/health 均返回 200。
  • 权限范围:售后复制当前采购员权限,包含 yeeke 退货包裹/同步记录模块;未授予管理员专属管理权限,不增加支付能力。
  • 文档:已更新 Architecture-and-Code-Map、Business-Rules-and-Glossary、Deployment-and-Operations,并完成 harness.py sync 与 sync --check。

全量 go test ./... 仍有仓库既有 app/goauto/sybimport 测试失败(规格解析/同步隔离样例),与本工单无关;本工单新增迁移定向测试和 access 测试通过。

实施完成,待验收。 - 代码:`17cbfaec85833bfd549570371a72422dc339b34a`,已合并并推送 `main`。 - 迁移:新增 `1789801100000_after_sales_role.go`,使用部署进程环境变量临时注入初始密码,源码、日志和工单未记录明文。 - 本地:迁移新增 1 个版本;角色 `after_sales`、四个账号、15 个菜单绑定和 82 条 Casbin 策略已回读;重复迁移为 0 个新增。 - 线上:迁移新增 1 个版本;systemd `goauto.service` 重启后为 active;重复迁移为 0 个新增;外部 `/` 和 `/api/v1/health` 均返回 200。 - 权限范围:售后复制当前采购员权限,包含 yeeke 退货包裹/同步记录模块;未授予管理员专属管理权限,不增加支付能力。 - 文档:已更新 Architecture-and-Code-Map、Business-Rules-and-Glossary、Deployment-and-Operations,并完成 `harness.py sync` 与 `sync --check`。 全量 `go test ./...` 仍有仓库既有 `app/goauto/sybimport` 测试失败(规格解析/同步隔离样例),与本工单无关;本工单新增迁移定向测试和 access 测试通过。
Author
Owner

补充缺陷与实施范围:

已确认线上后端已创建 after_sales 角色并复制采购员 Casbin 权限,但 Web 前端多个入口仍使用 admin / purchaser 硬编码判断,导致售后账号看不到功能入口。

本工单继续补齐:

  • SYB 商品页批量选择及批量匹配/采集/采购入口;
  • 退货同步入口;
  • 与上述功能对应的前端角色可见性判断;
  • 保持后端现有 Casbin 权限范围,不新增管理员专属权限,不增加支付能力。

验收:售后账号登录后可看到并使用授权的批量选择、规格匹配相关入口和退货同步入口;无关管理员设置入口仍不可见;采购员和管理员现有入口不回归。需要重新构建并发布 Web 后再验收。

补充缺陷与实施范围: 已确认线上后端已创建 `after_sales` 角色并复制采购员 Casbin 权限,但 Web 前端多个入口仍使用 `admin` / `purchaser` 硬编码判断,导致售后账号看不到功能入口。 本工单继续补齐: - SYB 商品页批量选择及批量匹配/采集/采购入口; - 退货同步入口; - 与上述功能对应的前端角色可见性判断; - 保持后端现有 Casbin 权限范围,不新增管理员专属权限,不增加支付能力。 验收:售后账号登录后可看到并使用授权的批量选择、规格匹配相关入口和退货同步入口;无关管理员设置入口仍不可见;采购员和管理员现有入口不回归。需要重新构建并发布 Web 后再验收。
Author
Owner

Web 权限遗漏已修复并发布,待验收。

  • 提交:6fe588d5e30348acb04cb5611824aee48fc93da1,已推送 main。
  • 修复 after_sales 在 SYB 商品页批量选择/匹配/采集/采购入口、PDD 商品关联采购入口、SYB 同步记录和 yeeke 退货同步记录入口的前端硬编码角色判断。
  • Web pnpm run build:prod 通过;pnpm run lint 仍有仓库既有错误,错误不在本次修改文件。
  • 已发布线上 Web,当前 release 为 20260927-6fe588d-341;GoAuto 重启后 active,健康检查 200。线上已回读新 JS 资源均包含 after_sales 判断。
  • 未重复执行数据库迁移,未扩大后端权限范围。
Web 权限遗漏已修复并发布,待验收。 - 提交:`6fe588d5e30348acb04cb5611824aee48fc93da1`,已推送 `main`。 - 修复 `after_sales` 在 SYB 商品页批量选择/匹配/采集/采购入口、PDD 商品关联采购入口、SYB 同步记录和 yeeke 退货同步记录入口的前端硬编码角色判断。 - Web `pnpm run build:prod` 通过;`pnpm run lint` 仍有仓库既有错误,错误不在本次修改文件。 - 已发布线上 Web,当前 release 为 `20260927-6fe588d-341`;GoAuto 重启后 active,健康检查 200。线上已回读新 JS 资源均包含 `after_sales` 判断。 - 未重复执行数据库迁移,未扩大后端权限范围。
Author
Owner

#338 联动发布补充(2026-09-27)

售后角色缺失“匹配退货”不是登录缓存问题,而是 #338 功能此前未合入 main。本次已合并并补授予 after_sales 退货匹配 API 权限;zengyt 实际登录验证通过,线上 Web/Server 已发布。请按 #338 验收实际按钮和流程;本工单仍保持待验收。

## #338 联动发布补充(2026-09-27) 售后角色缺失“匹配退货”不是登录缓存问题,而是 #338 功能此前未合入 `main`。本次已合并并补授予 `after_sales` 退货匹配 API 权限;zengyt 实际登录验证通过,线上 Web/Server 已发布。请按 #338 验收实际按钮和流程;本工单仍保持待验收。
Author
Owner

采购预检接口的售后权限遗漏(2026-09-27)

线上核验同一 SYB 订单 2609263TK065RF:管理员调用 POST /api/admin/v1/purchase-tasks/batch-preview 返回 200,阶段为“未关联 PDD”;售后账号 zengyt 调用同一接口返回 403“只有管理员或采购员可以操作采购任务”。前端因此把 403 显示为“采购准备检查失败,请点击刷新重试”。

修复范围

  • 在采购处理器 allowedOperator 中加入 after_sales;
  • 保持接口仍受 Admin Casbin 权限保护,不扩大到管理员专属模块;
  • 更新拒绝提示以包含售后角色;
  • 增加角色回归测试,确保 admin、purchaser、after_sales 可预检,其他角色仍被拒绝。

验收

  1. 管理员、采购员和售后账号对同一 SYB 商品调用预检接口返回 200,并显示一致的真实处理阶段;
  2. zengyt 在 SYB 商品页看到“未关联 PDD / 请先关联 PDD 商品”,不再看到通用预检失败;
  3. 未授权角色仍返回 403;
  4. 不改变数据库结构、采购状态机、退货匹配逻辑和管理员/采购员既有行为;
  5. Server 定向测试、构建、线上重启和双账号只读验证通过。
## 采购预检接口的售后权限遗漏(2026-09-27) 线上核验同一 SYB 订单 `2609263TK065RF`:管理员调用 `POST /api/admin/v1/purchase-tasks/batch-preview` 返回 200,阶段为“未关联 PDD”;售后账号 zengyt 调用同一接口返回 403“只有管理员或采购员可以操作采购任务”。前端因此把 403 显示为“采购准备检查失败,请点击刷新重试”。 ### 修复范围 - 在采购处理器 `allowedOperator` 中加入 `after_sales`; - 保持接口仍受 Admin Casbin 权限保护,不扩大到管理员专属模块; - 更新拒绝提示以包含售后角色; - 增加角色回归测试,确保 admin、purchaser、after_sales 可预检,其他角色仍被拒绝。 ### 验收 1. 管理员、采购员和售后账号对同一 SYB 商品调用预检接口返回 200,并显示一致的真实处理阶段; 2. zengyt 在 SYB 商品页看到“未关联 PDD / 请先关联 PDD 商品”,不再看到通用预检失败; 3. 未授权角色仍返回 403; 4. 不改变数据库结构、采购状态机、退货匹配逻辑和管理员/采购员既有行为; 5. Server 定向测试、构建、线上重启和双账号只读验证通过。
Author
Owner

修复完成并发布(2026-09-27)

  • 根因:purchase.allowedOperator 仅允许 admin/purchaser,售后账号调用采购预检接口返回 403;前端将该 403 显示为“采购准备检查失败”。
  • 修复提交:1491a96,加入 after_sales 并更新拒绝提示;新增角色回归测试。
  • 新增测试通过:go test ./app/goauto/purchase -run TestAllowedOperatorIncludesAfterSales -count=1;access、returnmatch 目标测试通过。采购包全量测试仍有既有 TestOrderBackfillConcurrentResolveUnknown 并发断言非确定性失败,与本修改无关。
  • 线上 release 已切换为 20260927-1491a96-341,GoAuto/Nginx active,/api/v1/health 和首页返回 200。
  • 用管理员和 zengyt 对 2609263TK065RF 的同一商品做只读预检:两者均返回 200,均显示“未关联 PDD / 请先关联 PDD 商品”。

请重新登录或刷新 zengyt 的 SYB 商品页验收。工单保持待验收。

## 修复完成并发布(2026-09-27) - 根因:`purchase.allowedOperator` 仅允许 `admin`/`purchaser`,售后账号调用采购预检接口返回 403;前端将该 403 显示为“采购准备检查失败”。 - 修复提交:`1491a96`,加入 `after_sales` 并更新拒绝提示;新增角色回归测试。 - 新增测试通过:`go test ./app/goauto/purchase -run TestAllowedOperatorIncludesAfterSales -count=1`;`access`、`returnmatch` 目标测试通过。采购包全量测试仍有既有 `TestOrderBackfillConcurrentResolveUnknown` 并发断言非确定性失败,与本修改无关。 - 线上 release 已切换为 `20260927-1491a96-341`,GoAuto/Nginx active,`/api/v1/health` 和首页返回 200。 - 用管理员和 zengyt 对 `2609263TK065RF` 的同一商品做只读预检:两者均返回 200,均显示“未关联 PDD / 请先关联 PDD 商品”。 请重新登录或刷新 zengyt 的 SYB 商品页验收。工单保持待验收。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#341