1. 页面概览

用户管理页是 LightAIP 管理后台(Admin)的账号治理入口,路由为 /admin/users。它提供用户列表、新建/编辑用户、分配角色、重置密码、锁定/解锁与删除能力。页面顶部有「新建用户」按钮,列表中每行按需提供操作按钮;当前登录用户不显示删除按钮。

所有能力对接 AIP 后端 18080 的 /api/v1/users/api/v1/roles/api/v1/me 路由组,均要求管理员角色。一句话总结:用户管理页是"账号生命周期 + 角色挂载"的管理员控制台。

2. 访问入口

2.1 路由与菜单

项目
路由 path/admin/users(父路由 /admin
路由 nameAdminUsers
路由 title用户管理
requiresAuthtrue;父路由 meta requiresAdmin: true
菜单位置Admin 后台菜单(AdminLayout.vue)「用户管理」
前端源码action/web/src/views/UsersPage.vue
路由注册action/web/src/router/index.js

2.2 认证与权限

/admin 父路由挂 requiresAdmin,非管理员被前端路由守卫拦截;请求经 action/web/src/api/aipClient.js(baseURL /aip-api/v1)附 localStorage.aip_token,后端 admin 组再经 adminMiddleware() 二次校验管理员角色。

2.3 端口与 API 前缀

AIP 后端默认端口 18080,API 前缀 /aip-api,实际请求路径 /aip-api/v1/users

3. 界面布局

+--------------------------------------------------+
| 用户管理  [新建用户]                               |
+--------------------------------------------------+
| [操作结果提示 alert(有消息时显示,可关闭)]          |
+--------------------------------------------------+
| 用户列表(card)                                   |
|  表格:ID|用户名|邮箱|姓名|锁定状态|角色|操作        |
|  操作:[编辑][分配角色][重置密码][锁定/解锁][删除]    |
+--------------------------------------------------+
| 新建/编辑用户弹窗:用户名* 密码*(新建时) 邮箱 姓名  |
| 分配角色弹窗:角色勾选列表(勾选即生效)             |
| 重置密码弹窗:新密码*                              |
+--------------------------------------------------+

各板块职责:

4. 交互元素

控件位置含义与作用
新建用户按钮页头打开新建用户弹窗(用户名、密码必填,密码至少 6 位)
编辑按钮列表行打开编辑弹窗,可改用户名/邮箱/姓名(PUT /users/:id
分配角色按钮列表行打开角色分配弹窗:并行拉取 /roles/users/:id/roles,勾选/取消立即 POST/DELETE 生效
重置密码按钮列表行先 confirm 再开弹窗,提交 POST /users/:id/password
锁定/解锁按钮列表行文案随状态切换,confirm 后 PUT /users/:id/lock,body {locked: !is_locked}
删除按钮列表行当前登录用户自身不显示;confirm 后 DELETE /users/:id,不可撤销

5. 后端关联

5.1 端点表

方法路径用途
GET/users全部用户列表 {users: [...]}
GET/me当前登录用户(含 is_admin),回写 localStorage.aip_is_admin
POST/users创建用户,body {username, password, email?, name?}
PUT/users/:id更新用户资料(不含密码)
DELETE/users/:id删除用户;禁止删除自己(400 cannot delete yourself)
GET/users/:id/roles用户已挂角色 {roles: [...]}
POST/users/:id/roles分配角色,body {role_id},重复分配 409
DELETE/users/:id/roles/:roleId移除角色(服务层含"admin 不能移除自己"自护)
POST/users/:id/password重置密码,body {password},至少 6 位
PUT/users/:id/lock锁定/解锁,body {locked: bool}(必填)

5.2 关键机制

6. 权限与安全

7. 常见问题与排错

问题 1:页面提示"加载用户列表失败"

现象:用户表格不出数,红色 alert。

原因:后端 401(Token 失效/非管理员被拒)或后端未启动。

处理:确认 Token 有效且当前账号为管理员;查看 Network 中 /aip-api/v1/users 响应码,401 重新登录,403 检查角色。

问题 2:保存用户报"密码至少 6 位"

现象:新建/重置密码被前端拦截。

原因:前端与后端校验一致("password must be at least 6 characters"),输入过短。

处理:输入不少于 6 位密码;重置弹窗同样校验。

问题 3:分配角色后列表角色没变化

现象:勾选后提示成功但用户行角色标签未变。

原因onRoleToggle 成功后会重新 fetchUsers,若刷新失败或列表未更新。

处理:手动刷新页面重拉列表;确认 POST/DELETE /users/:id/roles 响应正常。

8. 已知缺陷与边界

说明
密码策略简单仅校验长度 ≥6,无复杂度要求
无邮箱验证邮箱为可选文本,不做唯一性/格式强校验(前端 type=email)
无法删除自己前后端双重禁止,属有意设计

注:用户列表全量拉取无分页(用户量大时页面渲染较慢)已于 2026-09-06 修复(前端本地分页)。