admin
新增受显式调用控制的管理员 bootstrap 命令。在已完成 #20 迁移的数据库中,使用仓库外环境变量创建或维护 sys_user 的 admin 账号,并赋予 chorus_operator 角色。
sys_user
chorus_operator
CHORUS_ADMIN_USERNAME
CHORUS_ADMIN_PASSWORD
CHORUS_ADMIN_RESET_PASSWORD=1
不新增公开注册、找回密码、管理员网页登录流程、默认密码、AutoMigrate 或生产 dev-tools。
实现独立 cmd/chorus-admin-bootstrap(名称可随现有命令组织微调),只通过 CHORUS_DSN 连接已迁移数据库。命令先验证环境、确认 chorus_operator 角色和目标账号的状态,再在事务中创建账号或按显式 reset 标志更新 bcrypt hash。所有输出只描述结果,不回显用户名以外的敏感配置,更不回显密码或 hash。
cmd/chorus-admin-bootstrap
CHORUS_DSN
现有管理员行被保留;不删除角色、菜单或 API 种子。#20 的迁移和用户验收是硬前置,未满足时不得开始实现。
sys_*
go build ./...
go vet ./...
go test ./...
users
internal/adminbootstrap
SysUser.Encrypt
sys_user.role_id
sys_role_user
go test -count=1 ./internal/adminbootstrap ./cmd/chorus-admin-bootstrap
CHORUS_RUN_ADMIN_BOOTSTRAP_TESTS=1 go test -count=1 -v ./internal/adminbootstrap
go test -count=1 ./...
python dev_scripts/harness.py check --strict
python -m unittest discover -s tests -v
e936144
09e8601
Local-Development-and-Verification
6ee10fcf46eda115b5d1db03f94b0ba2c0f74655
Architecture-and-Code-Map
8805724b04c14ef2bb5161a79a037b36e1485b68
前置工单 #20 已于 2026-08-21 由用户验收通过;#28 的数据库基线前置已满足。
No dependencies set.
The note is not visible to the blocked user.
基本信息
原始需求
admin,凭据不得写入仓库;用户确认采用仓库外环境变量和一次性 bootstrap 命令的安全方案。目标与范围
新增受显式调用控制的管理员 bootstrap 命令。在已完成 #20 迁移的数据库中,使用仓库外环境变量创建或维护
sys_user的admin账号,并赋予chorus_operator角色。CHORUS_ADMIN_USERNAME读取;部署配置把它设为admin。CHORUS_ADMIN_PASSWORD读取;不接受命令行密码参数,不写入代码、日志、响应、工单、Wiki、原型或测试 fixture。CHORUS_ADMIN_RESET_PASSWORD=1时才会重置既有账号密码。chorus_operator,缺失时失败关闭。不新增公开注册、找回密码、管理员网页登录流程、默认密码、AutoMigrate 或生产 dev-tools。
已确认方案
实现独立
cmd/chorus-admin-bootstrap(名称可随现有命令组织微调),只通过CHORUS_DSN连接已迁移数据库。命令先验证环境、确认chorus_operator角色和目标账号的状态,再在事务中创建账号或按显式 reset 标志更新 bcrypt hash。所有输出只描述结果,不回显用户名以外的敏感配置,更不回显密码或 hash。现有管理员行被保留;不删除角色、菜单或 API 种子。#20 的迁移和用户验收是硬前置,未满足时不得开始实现。
依赖与并行
sys_*基线。设计证据
验收标准
chorus_operator角色绑定。CHORUS_ADMIN_RESET_PASSWORD=1的显式执行才更新 hash。go build ./...、go vet ./...、go test ./...通过;生产不调用 AutoMigrate。验证与回退
users、角色种子或迁移版本;不得以回退名义删除实际管理员数据。实施记录(2026-08-21)
cmd/chorus-admin-bootstrap与internal/adminbootstrap。命令不接受参数,只读取CHORUS_DSN、CHORUS_ADMIN_USERNAME、CHORUS_ADMIN_PASSWORD和可选的精确 reset 开关;不执行迁移、seed 或 AutoMigrate。SysUser.Encrypt使用裸 bcrypt;本实现使用相同的 bcrypt 默认成本,将sys_user.role_id绑定到已启用的chorus_operator。固定基线没有sys_role_user表。CHORUS_ADMIN_RESET_PASSWORD=1才在事务中更新。MySQL 8 测试和命令行测试均使用运行时随机构造凭据,结束后清理构造账号。go test -count=1 ./internal/adminbootstrap ./cmd/chorus-admin-bootstrap、隔离 MySQL 8 的CHORUS_RUN_ADMIN_BOOTSTRAP_TESTS=1 go test -count=1 -v ./internal/adminbootstrap、命令行创建/重复/reset/输出脱敏检查、go build ./...、go vet ./...、go test -count=1 ./...、python dev_scripts/harness.py check --strict和python -m unittest discover -s tests -v全部通过。e936144(实现与测试)、09e8601(最终 Wiki 镜像)。Local-Development-and-Verificationrevision6ee10fcf46eda115b5d1db03f94b0ba2c0f74655;Architecture-and-Code-Maprevision8805724b04c14ef2bb5161a79a037b36e1485b68。验收结果(2026-08-21)
文档影响
sys_user与users的边界。交付文档影响
前置工单 #20 已于 2026-08-21 由用户验收通过;#28 的数据库基线前置已满足。