hl-api-changelog/changelogs/2026-05/11_fix_admin_product-share-role-based-auth.md
API Changelog Bot cb6fa7328e fix notice: PR #1934 share 鉴权改多角色 union 查 CUSTOMIZER 已修 + QA 通过
根因:PermissionService.hasPermission 只查 currentRoleId 单角色 + Redis 24h 缓存,
与多角色业务不符。修复:ProductShareService 改读 AdminBasicDTO.roleKeys union 集合
查 CUSTOMIZER。wx (8 角色) + lixiaosong (单角色) 双正例 200 通过。
2026-05-11 10:39:35 +08:00

3.5 KiB

后端 fix 通知 — 产品分享鉴权改为多角色 union 查 CUSTOMIZER

日期: 2026-05-11 类型: 后端鉴权逻辑修复 (PR #1919 内部 follow-up) 模块: 产品管理 → 产品列表 → 分享产品 通知: @mmg 前端是否需改动: (接口契约零变化) 严重性: P0(用户 3 次反馈,核心功能不可用)


⚠️ 关键变化

PR #1919 上线后用户实测「自己作为定制师角色 → 点分享 → 后端返 403 无产品分享权限」。

PR #1934(commit e6cc3d73) 已合 dev + 测试服已部署 + QA 双正例通过。

根因

  • PermissionService.hasPermission 只查 admin.currentRoleId 单角色 + Redis 24h 缓存
  • admin 可挂多角色,实测 wx 持 8 个角色,但旧逻辑只看 currentRoleId 单角色查权限点
  • 与「持 CUSTOMIZER 角色就能分享」的业务直觉不符

修复

  • ProductShareService.share 第一步从 hasPermission(PRODUCT_SHARE) 改为 AdminBasicDTO.roleKeys 含 CUSTOMIZER(union 多角色)
  • 与第二步 targetAdmin.roleKeys 校验同一套数据源,语义统一
  • PERM_PRODUCT_SHARE 常量(不再消费该权限点)

业务规则

有 CUSTOMIZER 角色 → 可分享(union 多角色判断)。 不需要再单独绑定 PRODUCT_SHARE 权限点 — 历史 V_003 / V_001 的权限绑定保留不删,只是不再被消费。


接口契约零变化

POST /admin/product/item/{id}/share 入参 / 响应字段 / 错误码语义 0 改动,前端无需任何变更。

错误文案微调

无产品分享权限 (PRODUCT_SHARE) 无产品分享权限, 仅持定制师角色 (CUSTOMIZER) 可分享产品

如果前端 toast 有匹配旧文案的 if-else(不太可能),需要同步调整。直接显示 message 字段无需改。


测试服已验证(2026-05-11 10:36+)

测试主体 角色 union 接口 结果
wx(adminId=2021059720172838914) ADMIN, CUSTOMER_SERVICE, CUSTOMIZER, MATERIAL_ADMIN, OPERATOR, ROOM_MANAGER, SUPER_ADMIN, VEHICLE_MANAGER (8 角色) POST /admin/product/item/2045018534152478721/share {"targetAdminId":1002} 200, newProductId=2053665899663024129, "游牧的森林·南线经典来自wx的分享"
lixiaosong(adminId=2033349910786715649) CUSTOMIZER (单角色) POST /admin/product/item/2044704111294672897/share {"targetAdminId":1002} 200, newProductId=2053665998405316609, "嗨冰雪3.0南线6天5晚来自lixiaosong的分享"

两个典型 admin 都成功,产品名中文全角括号正确,无回归。


不影响范围

  • 接口路径 / Method / Request / Response schema 零变化
  • 第二步 targetAdmin 校验(roleKeys 含 CUSTOMIZER)逻辑不变,继续 union 多角色
  • admin_permission 表 PRODUCT_SHARE 权限点 + role binding 不删,历史兼容
  • 其他业务模块(如订单分配定制师 / 工单等)未受影响

相关 PR

PR 说明 状态
#1919 实现 admin 分享产品功能(Closes #1918) 已合
#1924 修 #1919 的中文括号 + fee_item 丢数据 已合 + 部署
#1930 customizers 接口加 enterpriseWechatName 已合 + 部署
#1933 customizers 字段兜底 username + CUSTOMIZER 加 PRODUCT_SHARE 权限 已合 + 部署(但因单 currentRoleId + Redis 缓存原因实际未生效)
#1934 本通知:share 鉴权改为多角色 union 查 CUSTOMIZER(根本性修复) 已合 + 部署 + QA 通过

联系人: wx