diff --git a/backend/internal/handler/merchant.go b/backend/internal/handler/merchant.go index 6e9d301..33b37f0 100644 --- a/backend/internal/handler/merchant.go +++ b/backend/internal/handler/merchant.go @@ -7,6 +7,7 @@ import ( "time" "affiliate_dash/internal/middleware" + "affiliate_dash/internal/model" "affiliate_dash/internal/pkg/response" "affiliate_dash/internal/service" @@ -78,7 +79,12 @@ type merchantProductStatusReq struct { // UpdateProductStatus PATCH /api/merchant/products/:id/status // 商户仅能上架/下架商品,价格、成本等配置由平台管理员维护。 // UpdateProduct PATCH /api/merchant/products/:id — 编辑商品(显示名称、售价、成本、库存、状态)。 +// 严格风控门禁:仅平台超级管理员(model.RoleAdmin)拥有修改商品价格、成本、库存与名称的权限,普通分销商严禁修改。 func (h *MerchantHandler) UpdateProduct(c *gin.Context) { + if middleware.GetRole(c) != model.RoleAdmin { + response.Forbidden(c, "权限不足:仅平台超级管理员可编辑商品价格、成本与库存") + return + } id, _ := strconv.ParseUint(c.Param("id"), 10, 64) if id == 0 { response.BadRequest(c, "参数错误") diff --git a/frontend/src/pages/MerchantCenter.tsx b/frontend/src/pages/MerchantCenter.tsx index dbf22b8..ce00022 100644 --- a/frontend/src/pages/MerchantCenter.tsx +++ b/frontend/src/pages/MerchantCenter.tsx @@ -564,6 +564,7 @@ export default function MerchantCenter({ fixedTab, title = '商户中心' }: Mer loading={loading} products={products} canManage={canManage} + canEditPricing={isAdmin} filters={productFilters} onToggleProduct={openProductToggle} onDeleteProduct={deleteProduct} diff --git a/frontend/src/pages/merchantCenterTabs.tsx b/frontend/src/pages/merchantCenterTabs.tsx index 006e1c5..bef4f00 100644 --- a/frontend/src/pages/merchantCenterTabs.tsx +++ b/frontend/src/pages/merchantCenterTabs.tsx @@ -63,6 +63,7 @@ export function ProductsTab({ loading, products, canManage, + canEditPricing = false, filters, onToggleProduct, onDeleteProduct, @@ -73,6 +74,7 @@ export function ProductsTab({ loading: boolean products: PageResult canManage: boolean + canEditPricing?: boolean filters: { keyword: string; status: string } onToggleProduct: (record: MerchantProduct) => void onDeleteProduct: (record: MerchantProduct) => void @@ -196,13 +198,15 @@ export function ProductsTab({ fixed: 'right', render: (_, record) => canManage ? ( - + {canEditPricing && ( + + )}