1) dsh-server-docs/ 从工作区(原 E:\...\aliyun-dsh-server\dsh-server-docs)**整体并入本仓**,
保留目录名 ⇒ 仓库内 dsh-server-docs/... 的相对引用天然继续有效;旧目录(含其 .git)已归档到
工作区 _中间产物_待清理/,未随本提交带入。
2) .gitattributes:新增 `dsh-server-docs/** -text` —— 原文档库是 `* -text` + autocrlf=false,
必须保持纯 LF,否则会被本仓的 CRLF 规则翻掉。
3) 活引用里的绝对路径已全部改到新位置(docs 的 INDEX / README / scripts / skills + 用户级 skills
+ ~/.workbuddy/settings.json 的 hooks);历史档案(04-调整方案/、archive/)按「只增不改」未动。
⚠️ hooks 路径改动需「完全重启会话」才生效(配置是会话启动快照)。
4) 交接单/T08:新增 §16「生产整体切换执行记录」(形态 / 落地动作 / **4 个只有真上线才暴露的真 bug** /
验收证据 / 回滚命令 / 残留项);台账 T08 行 → 已完成并归档;03-路线图 §二 登记 T08 收尾项。
5) 统一称谓:**「本机」只指跑 WorkBuddy 的开发机**,47 / 106 一律写「远程服务器」。
1.6 KiB
1.6 KiB
十九、界面删除用户功能(2026-09-09 07:00)
需求:管理界面在禁用/恢复右侧加删除按钮 → 弹窗输入该用户名相同名称确认 → 删除(admin 不可删)。
改动(commit 4943c8c,7 文件 +106/-2):
| 层 | 文件 | 改动 |
|---|---|---|
| 后端路由 | src/web/routes/admin.ts |
新增 DELETE /api/admin/users/:id:admin → 409;supervisor.stop → db.deleteUser(事务)→ rm users/<id>/ 目录 → userdel dsh-<id去横线20位>(OS 账号,失败容忍)→ audit |
| DB 接口 | src/db/adapter.ts |
+deleteUser(userId) |
| SQLite | src/db/schema→repo.ts + sqlite.ts |
事务按序清 credential_vault/domains/sessions/dsh_instances/audit_log/folder_plugins/workspaces/users(显式删除,不依赖 FK cascade 开关) |
| Postgres | src/db/pg.ts |
同序 withTx 实现 |
| 前端 | web/admin.html + web/desktop.html |
非 admin 行尾加 🗑 按钮(红色 ghost);点击 prompt 输入用户名比对确认后 DELETE;admin 行不渲染按钮 |
验证(全部实测):① 删 admin 自己 → 409 cannot_delete_admin ✅ ② 删 testuser → 200 ✅ ③ 删不存在 → 404 ✅ ④ 残留检查:users/credential_vault/sessions/workspaces/dsh_instances/domains/audit_log 7 表全 0、users/<id>/ 目录不存在、OS 账号 dsh-2d1f22ffcde04874ba1d 已删、用户列表仅剩 admin ✅
注意:userdel 账号名与 provision-new-users.sh 同规则(dsh- + uuid 去横线前 20 位);OS 账号删除失败只容忍不报错(DB/目录已清,残留仅 uid 占用)。testuser 已作为功能测试对象删除。