外观
用户与组织
概述
用户、部门、岗位是平台权限体系(RBAC)的基座:用户归属部门、可兼任多个岗位、并被赋予一个或多个角色。
系统管理下的"用户与组织"由三个相互关联的模块组成:
- 用户管理:维护账号、密码、所属部门、岗位、状态等,并提供导入导出、重置密码、分配角色、个人中心等能力。
- 部门管理:以树形结构组织公司/团队层级,支持级联启停用。
- 岗位管理:定义职位(如"研发工程师""产品经理"),供用户多选绑定。
三者关系如下:
用户管理

后端接口
用户接口路由前缀为 /system/user,核心能力如下(权限标识统一以 system:user:* 前缀):
| 能力 | 方法 & 路径 | 权限 |
|---|---|---|
| 分页查询 | GET /system/user/page | system:user:query |
| 按 ID 列表查询 | GET /system/user/list | system:user:query |
| 详情 | GET /system/user/get | system:user:query |
| 创建 | POST /system/user/create | system:user:create |
| 修改 | PUT /system/user/update | system:user:update |
| 删除 / 批量删除 | DELETE /system/user/delete、/delete-list | system:user:delete |
| 启用/停用 | PUT /system/user/update-status | system:user:update |
| 重置密码 | PUT /system/user/update-password | system:user:update |
| 按昵称模糊搜索 | GET /system/user/list-by-nickname | system:user:query |
| 精简列表(下拉用) | GET /system/user/simple-list | 不限数据权限 |
| 导出 / 导入模板 / 导入 | GET /export-excel、/get-import-template、POST /import | system:user:export、system:user:import |
此外,个人中心相关接口(登录用户本人操作,无 system:user 数据权限约束):
GET /system/user/profile/get:获取当前登录用户的资料、角色、部门、岗位。PUT /system/user/profile/update:修改个人资料(昵称/邮箱/手机/性别/头像)。PUT /system/user/profile/update-password:修改个人密码(需校验旧密码)。
关键业务规则
- 账号唯一:创建/修改时校验
username全局唯一;编辑时手机号、邮箱也需唯一。 - 密码安全:密码以哈希存储(
PwdUtil.hash_password);前端校验规则为 6–128 位且至少包含字母与数字。 - 部门约束:用户所属部门必须存在且未被停用(
status=1时拒绝绑定)。 - 岗位约束:绑定的岗位必须存在且未被停用,否则整体创建/更新失败。
- 删除保护:用户处于启用状态时不允许删除,且不能删除当前登录用户;删除前自动解除其与角色、岗位的关联(物理删除)。
- 响应补充:列表与详情会回填
deptName,并采用批量查询避免 N+1。
前端页面
用户管理页面位于 系统管理 → 用户管理,采用"左侧部门树 + 右侧用户表格"的布局:
页面交互要点(对应 src/views/system/user/index.vue):
- 左侧部门树点击后实时按
deptId过滤用户列表。 - 表格支持按账号、昵称、手机、邮箱、状态模糊/精确查询,并分页。
- 操作按钮均带
auth权限标识,无权限时自动隐藏(详见 前端权限集成)。 - "分配角色"复用权限模块的
assign-user-role能力;"导入"支持下载模板与覆盖更新(updateSupport)。
部门管理

后端接口
部门接口前缀为 /system/dept,以树形层级组织。
| 能力 | 方法 & 路径 | 权限 |
|---|---|---|
| 部门树 | GET /system/dept/tree | system:dept:query |
| 扁平列表 | GET /system/dept/list | system:dept:query |
| 精简列表(下拉用) | GET /system/dept/simple-list | 不限数据权限 |
| 详情 | GET /system/dept/get、/detail/{id} | system:dept:query |
| 创建 / 修改 | POST /create、PUT /update | system:dept:create、system:dept:update |
| 删除 / 批量删除 | DELETE /delete、/delete-list | system:dept:delete |
| 批量启停用 | PATCH /status/batch | system:dept:patch |
关键业务规则
- 树形结构:通过自引用外键
parent_id构建(顶级为 null),响应以children内嵌递归展开。 - 删除保护:存在子部门的父部门不允许直接删除,需先清理下级。
- 级联启停用:修改部门状态时会沿层级联动——启用某部门则自动启用其所有上级(
get_parent_recursion),停用某部门则自动停用其所有下级(get_child_recursion)。 - 缓存:部门增删改后会清空
dept命名空间缓存;但部门树查询暂不启用缓存(受数据权限 DATA_SCOPE 影响,缓存键不含用户维度,存在越权风险,待框架支持权限维度 key 后再开启)。 - 负责人:
leader_user_id为业务字段,由上层逻辑校验。
岗位管理

后端接口
岗位接口前缀为 /system/post,用于维护职位字典。
| 能力 | 方法 & 路径 | 权限 |
|---|---|---|
| 分页列表 | GET /system/post/page | system:post:query |
| 详情 | GET /system/post/get | system:post:query |
| 精简列表(下拉用) | GET /system/post/simple-list | 不限 |
| 创建 / 修改 | POST /create、PUT /update | system:post:create、system:post:update |
| 删除 / 批量删除 | DELETE /delete、/delete-list | system:post:delete |
| 批量启停用 | PATCH /status/batch | system:post:update |
| 导出 | GET /export-excel | system:post:export |
关键业务规则
- 名称唯一:岗位
name全局唯一。 - 状态过滤:精简列表仅返回启用(
status=0)岗位,供用户绑定/下拉场景使用。 - 缓存:岗位分页查询带 300s 缓存(
namespace=post),任何写操作均清空该命名空间。 - 数据权限:岗位模型的数据权限策略为
NONE,即所有登录用户均可读取,不受部门数据范围限制。
个人中心
登录用户可在"个人中心"自助维护资料与密码,对应 src/views/_core/profile 与 src/api/system/user/profile。
- 资料读取:
GET /system/user/profile/get一次selectinload加载dept / roles / posts三个关联,返回角色列表、部门、岗位等富信息。 - 资料修改:
PUT /system/user/profile/update,仅更新传入字段(昵称、邮箱、手机、性别、头像)。 - 密码修改:
PUT /system/user/profile/update-password,需先校验旧密码正确再写入新密码哈希。
Excel 导入导出
用户与岗位均支持 Excel 批量操作:
- 用户导入:下载模板(
get-import-template)后填写,再上传导入。模板含表头(部门编号、账号、昵称、邮箱、手机号、性别、状态)及性别/状态下拉项。导入时逐行用SAVEPOINT隔离,单行失败不影响其他行;默认密码为配置项USER_IMPORT_DEFAULT_PASSWORD(默认123456);updateSupport=true时支持账号已存在则覆盖更新。返回成功/失败条数及逐行错误明细。 - 用户/岗位导出:按中文字段映射导出,状态、性别等枚举转为可读文本(如
0→启用)。