Skip to content

用户与组织 ​

概述 ​

用户、部门、岗位是平台权限体系(RBAC)的基座:用户归属部门、可兼任多个岗位、并被赋予一个或多个角色。

系统管理下的"用户与组织"由三个相互关联的模块组成:

  • 用户管理:维护账号、密码、所属部门、岗位、状态等,并提供导入导出、重置密码、分配角色、个人中心等能力。
  • 部门管理:以树形结构组织公司/团队层级,支持级联启停用。
  • 岗位管理:定义职位(如"研发工程师""产品经理"),供用户多选绑定。

三者关系如下:

用户管理 ​

image-20260930111936017

后端接口 ​

用户接口路由前缀为 /system/user,核心能力如下(权限标识统一以 system:user:* 前缀):

能力方法 & 路径权限
分页查询GET /system/user/pagesystem:user:query
按 ID 列表查询GET /system/user/listsystem:user:query
详情GET /system/user/getsystem:user:query
创建POST /system/user/createsystem:user:create
修改PUT /system/user/updatesystem:user:update
删除 / 批量删除DELETE /system/user/delete、/delete-listsystem:user:delete
启用/停用PUT /system/user/update-statussystem:user:update
重置密码PUT /system/user/update-passwordsystem:user:update
按昵称模糊搜索GET /system/user/list-by-nicknamesystem:user:query
精简列表(下拉用)GET /system/user/simple-list不限数据权限
导出 / 导入模板 / 导入GET /export-excel、/get-import-template、POST /importsystem: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)。

部门管理 ​

image-20260930112221176

后端接口 ​

部门接口前缀为 /system/dept,以树形层级组织。

能力方法 & 路径权限
部门树GET /system/dept/treesystem:dept:query
扁平列表GET /system/dept/listsystem:dept:query
精简列表(下拉用)GET /system/dept/simple-list不限数据权限
详情GET /system/dept/get、/detail/{id}system:dept:query
创建 / 修改POST /create、PUT /updatesystem:dept:create、system:dept:update
删除 / 批量删除DELETE /delete、/delete-listsystem:dept:delete
批量启停用PATCH /status/batchsystem:dept:patch

关键业务规则 ​

  • 树形结构:通过自引用外键 parent_id 构建(顶级为 null),响应以 children 内嵌递归展开。
  • 删除保护:存在子部门的父部门不允许直接删除,需先清理下级。
  • 级联启停用:修改部门状态时会沿层级联动——启用某部门则自动启用其所有上级(get_parent_recursion),停用某部门则自动停用其所有下级(get_child_recursion)。
  • 缓存:部门增删改后会清空 dept 命名空间缓存;但部门树查询暂不启用缓存(受数据权限 DATA_SCOPE 影响,缓存键不含用户维度,存在越权风险,待框架支持权限维度 key 后再开启)。
  • 负责人:leader_user_id 为业务字段,由上层逻辑校验。

岗位管理 ​

image-20260930112303568

后端接口 ​

岗位接口前缀为 /system/post,用于维护职位字典。

能力方法 & 路径权限
分页列表GET /system/post/pagesystem:post:query
详情GET /system/post/getsystem:post:query
精简列表(下拉用)GET /system/post/simple-list不限
创建 / 修改POST /create、PUT /updatesystem:post:create、system:post:update
删除 / 批量删除DELETE /delete、/delete-listsystem:post:delete
批量启停用PATCH /status/batchsystem:post:update
导出GET /export-excelsystem: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→启用)。