docs: 归档任务 #127
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
# 127 Admin:按创建人隔离采集采购任务并增加管理员筛选
|
||||
|
||||
- 类型:需求 / 权限修复
|
||||
- 父级大工单:#14
|
||||
- 所属 MVP / 版本:#15 Admin 四模块可用闭环
|
||||
- 状态:已完成,待用户验收
|
||||
- 日期:2026-08-10
|
||||
- Gitea 工单:<http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/127>
|
||||
|
||||
## 背景与目标
|
||||
|
||||
原“采集采购”模块没有通用任务创建人,管理员和采购员共用全量任务查询与删除范围。
|
||||
本任务为新任务保存创建人,让采购员只能管理本人创建的任务,同时保留管理员全量查看、
|
||||
按创建人筛选和审计历史任务的能力。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)
|
||||
Reference in New Issue
Block a user