feat:账号设置+密码重置
This commit is contained in:
@@ -50,6 +50,42 @@
|
||||
> - `is_system_admin: bool` —— 派生自 `users.platform_role_id` 指向的角色 `role_code == 'admin'` 且用户状态为 `active`。前端据此决定是否渲染"系统管理"入口。
|
||||
> - `permissions: string[]` —— 当前用户通过其平台角色(`platform_role_id`)间接持有的菜单权限码列表(`permission_code`),按字典序排列;未分配平台角色时为空数组。前端据此过滤菜单与 `<RequirePermission>` 路由守卫。**仅控制前端展示,不参与后端 endpoint 鉴权**——后端鉴权继续由 `system_admin_context`(`role_code == 'admin'`)与 workspace membership 负责。详见 §7.12-7.14。
|
||||
|
||||
### 1.1 登录 / 会话
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|---|---|---|
|
||||
| `POST` | `/api/v1/auth/login` | 校验用户名密码,种 `access_token` HttpOnly Cookie,返回 `user` + `workspaces` |
|
||||
| `POST` | `/api/v1/auth/logout` | 清除 Cookie(幂等) |
|
||||
| `GET` | `/api/v1/auth/me` | 返回当前登录用户与可访问 workspace 列表 |
|
||||
|
||||
### 1.2 `PATCH /api/v1/auth/me` — 修改本人资料
|
||||
|
||||
当前登录用户修改自己的显示名 / 邮箱。不需要 `workspace_id`。
|
||||
|
||||
- **请求体**(至少提供一个字段;多余字段 → 422):
|
||||
|
||||
| 字段 | 类型 | 限制 | 说明 |
|
||||
|---|---|---|---|
|
||||
| `display_name` | string | 1~100 | trim 后写入 |
|
||||
| `email` | string \| null | ≤255 | trim 后写入;空字符串归一为 `null`;与其他未软删用户冲突 → 409 "邮箱已存在" |
|
||||
|
||||
- 不可通过本端点修改:`username`、`password`、`status`、`platform_role_id`。
|
||||
- **响应 200**:`data.user` 与 `GET /me` 中的 `user` 形状一致(含 `role_code` / `is_system_admin` / `permissions`)。
|
||||
|
||||
### 1.3 `POST /api/v1/auth/password` — 本人修改密码
|
||||
|
||||
- **请求体**:
|
||||
|
||||
| 字段 | 类型 | 限制 | 说明 |
|
||||
|---|---|---|---|
|
||||
| `current_password` | string | 1~72 | 当前密码 |
|
||||
| `new_password` | string | 8~72 | 新密码 |
|
||||
|
||||
- 当前密码错误 → 400 "当前密码不正确"。
|
||||
- 新密码与当前密码相同 → 400 "新密码不能与当前密码相同"。
|
||||
- **成功后清除会话 Cookie**,客户端须引导用户重新登录。
|
||||
- **响应 200**:`data.password_changed = true`。
|
||||
|
||||
---
|
||||
|
||||
## 二、统一约定
|
||||
@@ -635,6 +671,7 @@ Base 前缀 `/api/v1/admin`。
|
||||
| `GET` | `/api/v1/platform/employees` | 列全平台未软删员工(cursor 分页 + `q` 搜索,见 §7.0) |
|
||||
| `POST` | `/api/v1/platform/employees` | 创建平台员工账号(返回 201);不自动加入任何 workspace |
|
||||
| `PATCH` | `/api/v1/platform/employees/{user_id}` | 改员工资料/状态/平台角色(仅系统管理员) |
|
||||
| `POST` | `/api/v1/platform/employees/{user_id}/reset-password` | 重置员工密码(仅系统管理员;不需要旧密码) |
|
||||
| `DELETE` | `/api/v1/platform/employees/{user_id}` | 软删员工;级联软删其 workspace 成员关系(仅系统管理员) |
|
||||
| `GET` | `/api/v1/platform/workspaces` | 列 workspace(`active`/`archived`)(cursor 分页 + `q` 搜索,见 §7.0) |
|
||||
| `POST` | `/api/v1/platform/workspaces` | 创建 workspace(返回 201);创建者自动成为 admin 成员 |
|
||||
@@ -864,6 +901,19 @@ Base 前缀 `/api/v1/admin`。
|
||||
|
||||
- **响应 200**:返回更新后的 `PlatformEmployeePayload`,`role_code` / `role_name` 反映最新的 `platform_role_id`。
|
||||
|
||||
### 7.10.1 `POST /api/v1/platform/employees/{user_id}/reset-password`
|
||||
|
||||
系统管理员为指定员工设置新密码(不校验旧密码)。JWT 无服务端吊销列表,已有会话在过期前仍可用;对方下次登录须用新密码。
|
||||
|
||||
- **请求体**:
|
||||
|
||||
| 字段 | 类型 | 限制 | 说明 |
|
||||
|---|---|---|---|
|
||||
| `new_password` | string | 8~72 | 新密码;bcrypt 哈希后写入 `password_hash` |
|
||||
|
||||
- 目标不存在或已软删 → 404 "用户不存在"。
|
||||
- **响应 200**:`data = { "user_id": "...", "password_reset": true }`。
|
||||
|
||||
### 7.11 `DELETE /api/v1/platform/employees/{user_id}`
|
||||
|
||||
软删除平台员工;级联软删其所有 `workspace_members` 行。调用者必须是系统管理员。
|
||||
|
||||
Reference in New Issue
Block a user