当前“采集采购”模块没有任务创建人字段,所有已登录用户使用同一套列表、统计、详情和删除接口,因此采购员能够查看其他用户创建的采购任务、价格、执行结果,也可能通过提交任务编号删除其他用户的任务。
只增加“创建人”筛选不能形成权限隔离:采购员仍可选择“全部”或直接修改 URL。需要把创建人作为稳定审计字段,并由后端按角色强制限制可见范围。
PDD 商品档案、采集状态和采集结果仍是全局共享数据;本工单隔离的是任务记录,不拆分 PDD 商品数据。
tasks.created_by_user_id
created_by_user_id = 当前用户 ID
live_confirmed_by
created_by_user_id VARCHAR(191) NULL
users(user_id)
(created_by_user_id, updated_at DESC, task_id DESC)
model.Task
currentUser(c)
created_by
users
预计修改文件:
admin/repository/mysql_db.go
admin/repository/db.go
admin/model/model.go
admin/repository/task.go
admin/service/task.go
admin/handler/web/others.go
admin/templates/task/list.html
admin/templates/task/detail_modal.html
docs/admin/01-requirements.md
docs/admin/03-data-model.md
docs/admin/05-ui-specification.md
docs/admin/06-quality-security.md
docs/task/<工单号>-admin按创建人隔离采集采购任务.md
从 admin/ 目录执行:
admin/
$env:GOTOOLCHAIN='go1.23.0' gofmt -l . go build ./... go test ./... -count=1 go vet ./... Remove-Item Env:GOTOOLCHAIN
使用独立 MySQL 8.4 测试库验证:
实施进度:已完成 #127 主体实现。增加 MySQL v6 的 created_by_user_id、外键和索引;所有 Web 任务创建入口写当前用户;采购员列表、统计、分页、详情、删除固定为本人范围;管理员可筛选创建人和历史任务;混合越权删除整体回滚。已补迁移、入口、权限、模板测试与 Admin 文档。Go 1.23.0 的 test、vet、build 已通过。当前环境未启用独立 _test MySQL,真实 MySQL 8.4 迁移用例已写入但尚未实跑,不会用生产库代替测试库。实现细节:删除采用事务内带权限范围的 DELETE,并以受影响行数核对完整性;任一编号不存在或越权即回滚,与工单要求的全有或全无结果一致。
实施完成,状态:待用户验收。实现提交 a9f22b9;归档提交 dbe4779;归档 docs/task/127-admin按创建人隔离采集采购任务.md。Go 1.23.0 全包 test/vet/build 通过;真实 MySQL 8.4 隔离库 v5→v6、断点重跑和错误结构拒绝 2 项通过;任务创建入口、采购员范围、管理员筛选、越权详情、原子删除、禁用账号选项 6 项定向集成测试通过。生产 autobuy 数据未用于测试。未验证项仅为 1366×768 和双浏览器 Session 的人工视觉/操作验收。
用户已明确验收通过。验收清单已回填,本工单关闭。
No dependencies set.
The note is not visible to the blocked user.
基本信息
要解决什么
当前“采集采购”模块没有任务创建人字段,所有已登录用户使用同一套列表、统计、详情和删除接口,因此采购员能够查看其他用户创建的采购任务、价格、执行结果,也可能通过提交任务编号删除其他用户的任务。
只增加“创建人”筛选不能形成权限隔离:采购员仍可选择“全部”或直接修改 URL。需要把创建人作为稳定审计字段,并由后端按角色强制限制可见范围。
PDD 商品档案、采集状态和采集结果仍是全局共享数据;本工单隔离的是任务记录,不拆分 PDD 商品数据。
做什么 / 不做什么
做什么
tasks.created_by_user_id:created_by_user_id = 当前用户 ID的任务;不做什么
live_confirmed_by当作通用创建人;它只表示真实采购安全确认审计。怎么做
created_by_user_id VARCHAR(191) NULL;users(user_id);(created_by_user_id, updated_at DESC, task_id DESC);model.Task、Repository 任务插入与查询结构中增加创建人字段。currentUser(c)传到 Service;Service 校验登录用户为正常状态后,将其 UserID 写入任务。created_by查询参数必须忽略或拒绝,不能扩大范围。users获取创建人用户名;历史 NULL 显示“历史任务”,禁用账号仍显示原用户名。预计修改文件:
admin/repository/mysql_db.go及迁移/自检测试admin/repository/db.go(仅测试/历史兼容基线所需)admin/model/model.goadmin/repository/task.goadmin/service/task.goadmin/handler/web/others.goadmin/templates/task/list.htmladmin/templates/task/detail_modal.htmldocs/admin/01-requirements.mddocs/admin/03-data-model.mddocs/admin/05-ui-specification.mddocs/admin/06-quality-security.mddocs/task/<工单号>-admin按创建人隔离采集采购任务.md验收标准
怎么验证
从
admin/目录执行:使用独立 MySQL 8.4 测试库验证:
风险和回退
实施进度:已完成 #127 主体实现。增加 MySQL v6 的 created_by_user_id、外键和索引;所有 Web 任务创建入口写当前用户;采购员列表、统计、分页、详情、删除固定为本人范围;管理员可筛选创建人和历史任务;混合越权删除整体回滚。已补迁移、入口、权限、模板测试与 Admin 文档。Go 1.23.0 的 test、vet、build 已通过。当前环境未启用独立 _test MySQL,真实 MySQL 8.4 迁移用例已写入但尚未实跑,不会用生产库代替测试库。实现细节:删除采用事务内带权限范围的 DELETE,并以受影响行数核对完整性;任一编号不存在或越权即回滚,与工单要求的全有或全无结果一致。
实施完成,状态:待用户验收。实现提交 a9f22b9;归档提交 dbe4779;归档 docs/task/127-admin按创建人隔离采集采购任务.md。Go 1.23.0 全包 test/vet/build 通过;真实 MySQL 8.4 隔离库 v5→v6、断点重跑和错误结构拒绝 2 项通过;任务创建入口、采购员范围、管理员筛选、越权详情、原子删除、禁用账号选项 6 项定向集成测试通过。生产 autobuy 数据未用于测试。未验证项仅为 1366×768 和双浏览器 Session 的人工视觉/操作验收。
用户已明确验收通过。验收清单已回填,本工单关闭。