OpenClaw—AI研究OpenClaw—AI研究
  • AI动态
  • OpenClaw教程
  • 技术解读
  • 用户故事

【开发日志】ShopSystem Day 7 Bug 修复: 鉴权分层 + 商家业务过滤(2026-08-20)

【开发日志】ShopSystem Day 7 Bug 修复: 鉴权分层 + 商家业务过滤(2026-08-20)

2026年8月20日 by WoodStone

ShopSystem Day 7 凌晨刚发布完阶段 1(用户注册 + 商家升级链路),紧接着发现 2 个严重 Bug 紧急修复。本文专门记录 Bug 001 / 002 的根因、修复、验证。

ShopSystem 后台订单管理 admin 看全部

Bug 001 严重程度 🔴 阻塞 —— 商家可绕过权限访问 admin 功能。根因是 Day 5 设计错误:`requireAdmin()` 函数旧实现是 `if (user.role !== “admin” && user.role !== “merchant”) redirect()`,把 merchant 角色也算进了 admin——因为当时商家后台和 admin 后台共用 AdminShell 组件,偷懒让商家也走 admin 鉴权。但 `/ladmintood/users`(用户管理)/ `/ladmintood/settings`(系统设置)/ `/ladmintood/merchants`(商家审核) 这些都是 admin-only 功能,商家绝对不能访问。实测商家账号登录后 `PATCH /api/admin/users/1 {status:”banned”}` 返回 200,admin 真的被禁用了。修复方案是 auth.ts 拆成 3 层:`requireUser()`(任意登录)/ `requireAdminOrMerchant()`(商家后台页,显式语义)/ `requireAdminOnly()`(仅 admin)。7 个 admin-only 文件批量 sed 替换 requireAdmin → requireAdminOnly,商家后台页(`dashboard` / `merchant/products`)保留 requireAdmin(走别名 requireAdminOrMerchant)。

ShopSystem 商家访问 /ladmintood/users 被 307 跳登录页

Bug 001 修复验证(用 `qa-buyer-1124@shop.local` 当 merchant):商家访问 `/ladmintood/users` / `/ladmintood/settings` / `/ladmintood/merchants` / `/ladmintood/orders` 全部 307 跳登录,商家访问 `/ladmintood/dashboard` 仍 200(商家后台能用);`PATCH /api/admin/users/1` 商家被 307 拒。admin 访问所有 admin-only 路径返回 200,admin 改自己返 400 自我保护。

ShopSystem 商家后台 dashboard 正常(角色显示 merchant)

Bug 002 严重程度 🟡 功能异常 —— 商家看不到自己订单 / 可改别人订单。这个是 Bug 001 修复的副作用:我把 `/ladmintood/orders` 也改成 requireAdminOnly,商家完全看不到任何订单了;同时 `/api/admin/orders/[id]/status` 没加店铺归属校验,任何商家可以改任何订单状态(更危险)。修复方案:`/ladmintood/orders` 改回 `requireAdminOrMerchant()` + SQL 加 `EXISTS (SELECT 1 FROM order_items oi JOIN products p ON p.id = oi.product_id WHERE oi.order_id = o.id AND p.merchant_id = ?)` 过滤商家只看自己店铺订单;`/api/admin/orders/[id]/status` 商家改状态前先查 EXISTS 店铺归属,不归属返 403 “订单不属于您的店铺”。验证:商家登录后看到 2 个含自己商品的订单,商家改自己店铺订单 200,把 product 1 的 merchant_id 改给别人后商家改订单 2 → 403,admin 改任何订单 200。沉淀 2 条新铁律:鉴权分层(`requireAdminOnly` vs `requireAdminOrMerchant`)+ 商家业务页/API 必须加店铺归属 SQL 过滤(鉴权只是入口,数据范围必须 SQL 层控制)。

关于作者:WoodStoneShopSystem 项目负责人,专注网商平台与电商 AI 集成

← 返回文章列表
分类: 技术解读 标记: auth, bug-fix, day7, dev-log, nextjs, redis, security, shopsystem

© 2026 OpenClaw—AI研究 版权所有

沪ICP备2026010690号-1