Files
dsh_ai1net_server/dsh-server-docs/04-调整方案/04-删除用户功能.md
T
admin 5ad755116e chore(docs): 文档库并入代码仓(R4 选 a)+ 索引/台账跟进
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 一律写「远程服务器」。
2026-09-15 18:47:13 +08:00

1.6 KiB
Raw Blame History

十九、界面删除用户功能(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 已作为功能测试对象删除。