diff --git a/inventory-backend/app/api/v1/inbound/base.py b/inventory-backend/app/api/v1/inbound/base.py index 4ae1bbd..6f9a5d5 100644 --- a/inventory-backend/app/api/v1/inbound/base.py +++ b/inventory-backend/app/api/v1/inbound/base.py @@ -264,6 +264,18 @@ def create(): 'availableCount': 'material_list:availableCount', 'generalManual': 'material_list:files', 'generalImage': 'material_list:files', + # ★ 附件备注的写权限单独收紧(原先这两个字段**不在映射中**,落入 + # 下面「不在映射中 → 默认允许」的兜底分支 —— 任何能调通本接口的 + # 角色都能改;而读侧又要求一个从未注册过的权限码,造成 + # 「谁都能写、除超管没人能读」的读写错位。现双向对齐: + # 读 → material_list:productImageRemark / manualLinkRemark(6 角色) + # 写 → material_list:remark_edit(3 个核心管理角色) + # 无写权限的请求不会携带该字段进入服务层,于是既不改动它、 + # 也不会写成空值 —— 是「丢弃本次修改」而非「误清既有内容」。 + # ⚠ 该码只做精确匹配,**不要**用 @permission_required 包裹 —— + # 会被 _expand_operation_perms 前缀桥接放大给 material_list:operation。 + 'productImageRemark': 'material_list:remark_edit', + 'manualLinkRemark': 'material_list:remark_edit', 'referencePrice': 'material_list:referencePrice', 'isEnabled': 'material_list:isEnabled' } @@ -319,6 +331,18 @@ def update(id): 'availableCount': 'material_list:availableCount', 'generalManual': 'material_list:files', 'generalImage': 'material_list:files', + # ★ 附件备注的写权限单独收紧(原先这两个字段**不在映射中**,落入 + # 下面「不在映射中 → 默认允许」的兜底分支 —— 任何能调通本接口的 + # 角色都能改;而读侧又要求一个从未注册过的权限码,造成 + # 「谁都能写、除超管没人能读」的读写错位。现双向对齐: + # 读 → material_list:productImageRemark / manualLinkRemark(6 角色) + # 写 → material_list:remark_edit(3 个核心管理角色) + # 无写权限的请求不会携带该字段进入服务层,于是既不改动它、 + # 也不会写成空值 —— 是「丢弃本次修改」而非「误清既有内容」。 + # ⚠ 该码只做精确匹配,**不要**用 @permission_required 包裹 —— + # 会被 _expand_operation_perms 前缀桥接放大给 material_list:operation。 + 'productImageRemark': 'material_list:remark_edit', + 'manualLinkRemark': 'material_list:remark_edit', 'referencePrice': 'material_list:referencePrice', 'isEnabled': 'material_list:isEnabled' }