Files
cmautobuy/docs/task/127-admin按创建人隔离采集采购任务.md
T

5.0 KiB

127 Admin:按创建人隔离采集采购任务并增加管理员筛选

背景与目标

原“采集采购”模块没有通用任务创建人,管理员和采购员共用全量任务查询与删除范围。 本任务为新任务保存创建人,让采购员只能管理本人创建的任务,同时保留管理员全量查看、 按创建人筛选和审计历史任务的能力。PDD 商品档案和 Client 接口继续全局共享。

最终方案

  • MySQL v6 为 tasks 增加可空的 created_by_user_id、用户外键和创建人分页索引。 存量 NULL 不做推断,统一显示为“历史任务”。迁移逐项检查并可在 DDL 中断后重放。
  • PDD 批量采集、单商品重新采集、蝦皮/顺运宝关联采集和采购任务创建均写入当前 正常状态网页登录用户 ID。
  • 服务端用 TaskFilter.VisibleUserID 固定采购员范围;管理员可在全量范围上继续按 账号或历史任务收窄。列表、状态统计和分页复用同一筛选条件。
  • 详情先按当前用户范围确认可见性,越权和不存在统一返回 404;详情始终显示创建人。
  • 删除在事务内执行带创建人范围的 DELETE,以去重后的请求数量核对受影响行数。 任一编号不存在或越权即回滚,因此不会部分删除。
  • 管理员工具条增加创建人筛选和明确的“筛选”按钮,列表增加创建人列;采购员不显示 这两个管理员专用控件。
  • 与建单方案的实现差异:删除没有先做一次 SELECT ... FOR UPDATE,而是用单条带权限 条件的 DELETE 获取行锁并核对受影响行数;事务回滚后外部行为仍是全有或全无, 同时减少一次查询。历史 SQLite migrations 按规则保持冻结。

改了哪些

  • admin/repository/mysql_db.go:增加可重放的 MySQL v6 迁移、外键/索引和 schema 自检。
  • admin/model/model.go、admin/repository/task.go、admin/repository/user.go:增加任务 创建人字段、统一筛选范围、创建人选项、可见性检查和原子范围删除。
  • admin/service/task.go、admin/service/pdd.go、admin/service/shopee_pdd.go、 admin/service/purchase_workflow.go:接入当前用户、权限隔离、管理员筛选和创建人展示。
  • admin/handler/web/others.go、shopee.go:所有 Web 创建入口传入当前用户,任务详情 和删除改用角色范围。
  • admin/templates/task/list.html、detail_modal.html:增加管理员创建人筛选/列和详情字段。
  • 相邻 Go 测试:覆盖 v5→v6、断点重跑、错误结构拒绝、创建入口写入、角色隔离、 URL 筛选伪造、统计、详情、混合删除回滚、禁用账号选项和模板结构。
  • docs/admin/01-requirements.md、03-data-model.md、05-ui-specification.md、 06-quality-security.md:同步稳定需求、数据结构、界面和安全测试基线。

验收结果

验收标准 结果
新建采集、重采、关联采集和采购任务记录当前用户 通过
管理员查看全量并筛选正常、禁用账号及历史任务 通过
采购员只能查看本人任务,伪造创建人参数不能扩大范围 通过
列表、状态统计和分页使用同一用户范围 通过
管理员列表与详情显示创建人,NULL 显示历史任务 通过
越权详情返回不存在;混合越权删除完整回滚 通过
管理员和采购员分别可删除其有权删除的任务 通过
PDD 共享数据和 Client 四接口行为不变 通过,未改接口与共享商品查询
MySQL v5→v6、断点重跑、错误形状拒绝和 schema 自检 通过,真实 MySQL 8.4 隔离测试库
Go 1.23.0 build、test、vet 通过

测试

  • 执行的命令:
    • gofmt -l .
    • $env:GOTOOLCHAIN='go1.23.0'; go test ./... -count=1; go vet ./...; go build ./...
    • 在 autobuy_test / autobuy_test_* 隔离库执行迁移定向测试: go test ./repository -run 'TestMySQLMigrate_(V5升级V6且断点重跑|V6形状错误不记版本)' -count=1 -v
    • 在隔离库执行 #127 Service 定向测试:任务创建入口、采购员范围、管理员筛选、 越权详情、原子删除和禁用账号选项共 6 项。
    • git diff --check
  • 结果:Go 1.23.0 全包代码级测试、静态检查和构建通过;真实 MySQL 8.4 迁移测试 2 项通过,Service 定向集成测试 6 项通过;生产 autobuy 数据未被测试触碰。
  • 没验证到的部分:未在 1366×768 浏览器中做人工视觉验收;未用两个真实浏览器 Session 手工操作管理员/采购员页面。相关权限、模板条件和路由行为已由自动化测试覆盖。

相关提交

  • a9f22b9 feat: 按创建人隔离采集采购任务 (#127)