# 后端 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