Skip to content

6.4 部门管理 ​

概述

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

接口清单 ​

text
七件套: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

与其他模块的关系 ​

text
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 变更)

小蚂蚁云团队 · 提供技术支持