Files
easygoadmin-wiki/EasyGoAdmin_GoFrame_NaiveVue/zh/modules/dept.md
T
2026-10-20 21:53:26 +08:00

1.9 KiB
Raw Blame History

6.4 部门管理

:::tip 概述 部门模块(goframe_dept,租户级表)管理组织架构:树形结构、删除有子级/用户守卫、租户内名称唯一。部门是数据权限(本部门及以下/本部门)的组织基础。 :::

接口清单

七件套:sys:dept:{page|list|detail|add|update|delete|batchDelete}
List 返回树形(IsTree + ParentOf)

模块特征

特征 实现
树形 IsTree + ParentOf,List 自动建树
删除守卫 存在子部门拒绝(1011);存在用户引用拒绝(1014 语义)
唯一性 租户内部门名唯一(uk_tenant_name)
数据权限 dept_id 是 data_scope 档 2/3 的过滤维度
子树查询 data_scope.go deptSubtreeIds:拉全租户部门行后 BFS

与其他模块的关系

user.dept_id → dept.id          用户归属部门(用户表单部门选择)
data_scope 档 2/3                按部门维度过滤可见数据(见 5.9 数据权限)
deptSubtreeIds(deptId)           档 2 "本部门及以下"的子孙部门集合计算
                                 (每次全量拉部门表 BFS,树小无缓存;
                                   部门表数百行内无感知,上万行需加短时缓存)

唯一性说明

建表有 uk_tenant_name (tenant_id, name, del_flag) 唯一索引,但 dept 模块未声明 UniqueFields 预检——重复名称提交会收到数据库 1062 裸错误。修复方向:补 UniqueFields{Field:"name", Group:"tenant_id"}(预检范围=索引范围)。

管理建议

  • 部门层级建议控制在 5 层内(子树 BFS 与前端展示友好)
  • 删除部门前先处理子部门与挂载用户(守卫会拦截)
  • 未分配部门(dept_id=0)的用户挂数据权限档 2/3 时降级为"仅本人"(防可见面意外放大)
  • 部门调整后,受影响用户的数据权限即时生效(user.Update 清身份缓存路径覆盖 dept_id 变更)