Skip to content

数据权限

数据权限用于控制“用户能看到哪些业务数据”。它不同于功能权限:功能权限决定能否进入页面或点击按钮,数据权限决定进入页面后查询结果的范围。RuoYi Office 当前在角色维度配置数据范围,并结合部门树实现组织隔离。

本地实现位置

位置
角色页面ruoyi-office-vben/apps/web-antd/src/views/system/role
数据权限弹窗views/system/role/modules/assign-data-permission-form.vue
权限接口ruoyi-office-vben/apps/web-antd/src/api/system/permission
后端入口yudao-module-system-server/.../permission/PermissionController.java
数据权限框架ruoyi-office/yudao-framework/yudao-spring-boot-starter-biz-data-permission

数据权限与功能权限的区别

维度功能权限数据权限
控制对象菜单、按钮、接口查询数据范围
配置位置角色分配菜单角色分配数据范围
常见标识system:user:createdataScopedataScopeDeptIds
典型问题看不到按钮、接口 403列表数据少、只能看本部门

配置入口

进入“系统管理 -> 角色管理”,在角色行操作中选择“数据权限”。弹窗会加载部门树,并提交到:

text
POST /system/permission/assign-role-data-scope

请求体来自 AssignRoleDataScopeReqVO

字段说明
roleId角色编号
dataScope数据范围类型
dataScopeDeptIds自定义数据范围下允许访问的部门编号列表

常见数据范围

实际选项以 SystemDataScopeEnum 和后端枚举为准,项目中常见语义如下:

范围说明适用场景
全部数据不限制部门超级管理员、集团级管理员
指定部门数据只看勾选部门区域负责人、共享服务中心
本部门数据只看用户所在部门部门主管
本部门及以下数据看本部门与子部门事业部负责人
仅本人数据只看自己创建或归属的数据普通员工、销售个人

前端交互细节

assign-data-permission-form.vue 支持三类辅助操作:

  • 全选:一次勾选全部部门节点。
  • 全部展开:展开完整部门树,便于跨层级选择。
  • 父子联动:控制部门树勾选时父子节点是否联动。

dataScope 不是“指定部门数据”时,前端会把 dataScopeDeptIds 置空,避免保存无效部门列表。

后端生效链路

业务模块是否自动生效,取决于查询方法、Mapper 和数据权限注解是否接入框架。少数公共查询或个人中心查询会显式关闭数据权限,例如个人中心查询部门信息时使用 @DataPermission(enable = false)

二开建议

  1. 新增业务表时明确归属字段:如果列表需要按部门或本人过滤,表结构和 DO 应能表达创建人、负责人、部门等归属关系。
  2. 不要用前端过滤替代后端数据权限:前端隐藏只是体验优化,安全边界必须在后端查询层。
  3. 公共字典、组织树谨慎过滤:基础数据过度过滤会导致下拉缺项,可参考个人中心按需关闭数据权限。
  4. 多角色用户取并集还是优先级要确认:排查数据过多/过少时,先查看用户拥有的所有角色及其数据范围。

排查清单

现象排查方向
用户列表为空用户角色的数据范围是否只包含空部门,当前账号是否有部门
勾选自定义部门未生效dataScope 是否为指定部门数据,dataScopeDeptIds 是否提交
普通员工看到全量数据是否误分配了全部数据权限角色
个人中心能看到部门但业务列表看不到个人中心可能关闭了数据权限,业务列表仍受限制
联系我们

获取报价、演示和二开方案

微信咨询二维码

微信咨询

17156169080

添加时备注「RuoYi Office」

在线体验商业版