Files

18 lines
1.6 KiB
Markdown
Raw Permalink Normal View 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 已作为功能测试对象删除。