AGENTS.md
30d8238
server/app/goauto/access/purchaser.go
AdminAPIs
PurchaserAPIs()
server/cmd/migrate/migration/version-local/1786701700000_purchaser_role.go
sys_api
casbin_rule
ptype='p' AND v0=purchaser
sys_menu
web/src/router/index.js
constantRoutes
asyncRoutes
sys_menu_api_rule
app/admin/models/sys_menu.go:22
Purchaser
两者性质不同:
因此:安全由 API 层兜底,可见性放开配置。
「只增不删」同时满足两个需求:新增模块无需每次手工勾;人工取消的勾选不被覆盖。代价是批量减少菜单只能人工操作,代码改默认值对已有角色不生效——对内部系统可接受,且安全线在 API 层不受影响。
在 access 包新增模块级定义,从现有 AdminAPIs 矩阵派生,每个模块包含:菜单标题、前端路径、图标、排序、所含 API 列表、采购员默认可见与否。
access
迁移据此同时生成 sys_menu、sys_api、casbin_rule 与 sys_menu_api_rule。「采购员能看什么」只有一处定义。
server/app/goauto/access
Purchaser=true
path
go test ./app/goauto/access/... ./cmd/migrate/...
Architecture-and-Code-Map
Business-Rules-and-Glossary
sync
sync --check
待实施(数据库迁移需实施前再次人工确认)。
已按工单方案完成并推送:72f54f7 feat(goauto): add configurable module menus (#137)。
72f54f7 feat(goauto): add configurable module menus (#137)
1787885400000_goauto_menus.go
AdminAPIs/PurchaserAPIs()
go test ./...
scripts/verify.ps1 -Component all
python dev_scripts/harness.py check --strict
python dev_scripts/harness.py sync --check
Architecture-and-Code-Map@267a75be046b2faedddbad86232e2c78b08ba92c
Business-Rules-and-Glossary@92a67263229d3f98861b2526422d12ce13bb81c1
在 #140/#141 获授权的 Admin 重启中,#137 迁移版本 1787885400000 已成功执行:GoAuto 父子菜单 22 条、根菜单排序 50~60;采购员默认绑定 10 个模块,AI 规格匹配菜单保持 0 绑定。Admin 已进入工作台并显示全部 11 个模块。#137 仍等待用户业务验收。
1787885400000
用户于 2026-08-29 明确确认本工单通过验收。验收结论已记录,现关闭工单。没有新的长期事实变化,本次不重复同步 Wiki。
No dependencies set.
The note is not visible to the blocked user.
所属与来源
AGENTS.md「Gitea 交互与工单最小读取」记录回退原因。当前事实(提交
30d8238复核)server/app/goauto/access/purchaser.go是一份审阅过的权限矩阵(AdminAPIs与PurchaserAPIs());迁移server/cmd/migrate/migration/version-local/1786701700000_purchaser_role.go会创建「采购员」角色、把全部 GoAuto API 写入sys_api,并把采购员可用的写入casbin_rule。该迁移对采购员的 casbin 策略执行全量重建(先按ptype='p' AND v0=purchaser删除再重建),因此代码中减权可自动生效。sys_menu中没有任何 GoAuto 模块记录,因此角色编辑页的菜单树里选不到这些模块。web/src/router/index.js的constantRoutes(第 38~245 行,asyncRoutes自 246 行起)。constantRoutes对所有登录用户可见、不做角色过滤、也不读后端菜单。sys_menu与sys_api之间通过sys_menu_api_rule多对多关联(app/admin/models/sys_menu.go:22)。目标
sys_menu,使角色编辑页可以勾选。非目标
casbin_rule仍由代码矩阵维护并全量重建。AdminAPIs矩阵中任何一条的Purchaser取值。关键设计决定
一、菜单可配、API 权限不可配(分层)
两者性质不同:
因此:安全由 API 层兜底,可见性放开配置。
二、迁移的三种语义必须区分
casbin_rule(API 权限)sys_menu记录本身「只增不删」同时满足两个需求:新增模块无需每次手工勾;人工取消的勾选不被覆盖。代价是批量减少菜单只能人工操作,代码改默认值对已有角色不生效——对内部系统可接受,且安全线在 API 层不受影响。
三、单一事实源
在
access包新增模块级定义,从现有AdminAPIs矩阵派生,每个模块包含:菜单标题、前端路径、图标、排序、所含 API 列表、采购员默认可见与否。迁移据此同时生成
sys_menu、sys_api、casbin_rule与sys_menu_api_rule。「采购员能看什么」只有一处定义。实施方案
server/app/goauto/access新增模块定义,覆盖现有全部 GoAuto 前端模块:设备、PDD 商品、虾皮商品、SYB 商品、SYB 店铺、SYB 同步记录、档口入库码、采集规则、采集任务、采购任务、AI 匹配设置。路径与web/src/router/index.js中的既有路由严格一致,否则前端改造时会出现菜单点不动。AdminAPIs中Purchaser=true的 API 所属模块推导。sys_menu、sys_api、casbin_rule与角色菜单绑定。安全边界
验收标准
AdminAPIs中Purchaser=true的模块一致。casbin_rule中对应策略被移除(全量重建行为未被破坏)。path与web/src/router/index.js中既有路由逐条一致。验证方式
go test ./app/goauto/access/... ./cmd/migrate/...path与前端路由的一致性用测试或脚本逐条比对,不靠人工核对。依赖、并行与风险
path与前端路由不一致会导致菜单点不动或白屏。缓解:第 1 项要求严格一致,验收含逐条比对。文档影响
Architecture-and-Code-Map:模块定义作为菜单与权限的单一事实源,及迁移的三种语义。Business-Rules-and-Glossary:采购员与管理员的可见范围边界,AI 匹配设置的硬约束,以及「菜单可后期配置、API 权限由代码维护」的分层原则。sync与一轮sync --check,把页面与 revision 写回本工单。状态
待实施(数据库迁移需实施前再次人工确认)。
实施完成,待验收
已按工单方案完成并推送:
72f54f7 feat(goauto): add configurable module menus (#137)。实现
server/app/goauto/access建立 11 个 GoAuto 模块定义,统一维护标题、路径、组件、图标、排序、模块 API 与采购员默认可见/硬排除标记;增加与当前 Web 静态路由的一致性测试。1787885400000_goauto_menus.go,幂等维护模块目录/页面菜单、sys_menu_api_rule、采购员 Casbin 固定白名单和采购员菜单绑定。AdminAPIs/PurchaserAPIs()固定矩阵全量生成,不能由菜单勾选扩大;AI 菜单选中请求会返回明确错误。工单要求的既有 API 权限值未改变,采购员仍只可读取 AI 是否启用。验证
go test ./...:通过。scripts/verify.ps1 -Component all:通过;Server 测试/构建、Web lint/生产构建、Android 单测/debug APK 均通过。Web lint 为仓库既有 30 warnings、0 errors。python dev_scripts/harness.py check --strict:通过。python dev_scripts/harness.py sync --check:通过。Architecture-and-Code-Map@267a75be046b2faedddbad86232e2c78b08ba92c、Business-Rules-and-Glossary@92a67263229d3f98861b2526422d12ce13bb81c1。边界与未验证项
本机迁移状态更新
在 #140/#141 获授权的 Admin 重启中,#137 迁移版本
1787885400000已成功执行:GoAuto 父子菜单 22 条、根菜单排序 50~60;采购员默认绑定 10 个模块,AI 规格匹配菜单保持 0 绑定。Admin 已进入工作台并显示全部 11 个模块。#137 仍等待用户业务验收。用户于 2026-08-29 明确确认本工单通过验收。验收结论已记录,现关闭工单。没有新的长期事实变化,本次不重复同步 Wiki。