Skip to content

数据权限配置

数据权限是 Forge Admin 在菜单权限之上提供的更细粒度的访问控制机制。它控制的是用户能看到哪些数据,而非能访问哪些功能

核心概念

Forge Admin 通过 DataScopeInterceptor 拦截器自动改写 SQL 查询语句,在数据库层面过滤数据。数据权限与角色绑定——角色拥有的用户共享相同的数据范围规则。

数据权限有两处:

  • 平台管理 → 数据权限配置/system/dataScopeConfig):给 Mapper 查询配资源编码、查询方法、权限字段。
  • 角色上的数据范围:角色列表的「数据范围」列(演示值有全部数据 / 本租户数据 / 个人数据 / 本组织及子组织等)。

数据权限配置

2026-08-26 演示站实拍。搜索:资源编码 / 权限标识、资源名称、是否启用。主按钮是 新增配置 / 批量删除。列表列:资源、查询方法、权限字段、状态、备注、操作。行操作是 编辑 / 删除

新增配置

新增配置。三步:① 绑定查询接口 ② 配置过滤字段 ③ 备注。

新增数据权限配置

步骤字段说明
① 绑定查询接口资源编码 *system:user:list
资源名称 *如「用户列表查询」
Mapper方法 *完整方法名,要和 XML 的 mapperMethod 一致。可点「用户分页 / 组织列表」示例填入
主表别名
是否启用启用 / 禁用
② 配置过滤字段用户字段 *简单模式填字段名,复杂模式用 <sql>。变量:#{userId} #{tenantId} #{orgIds} #{customOrgIds}
组织字段 *dept_id / org_id
租户字段 *通常 tenant_id
区划字段region_code / area_code
用户区划字段 / 用户表别名选填
③ 备注备注

角色数据范围

字典是 sys_role_data_scope,写在 sys_role.data_scope

标签
1全部数据
2本租户数据
3本组织数据
4本组织及子组织
5个人数据
7本行政区划数据

组织树是 sys_org,不是部门表。5 且在 sys_role_data_scope 挂了组织时,按自定义组织解释(DataScopeType.getByRoleDataScope)。没有「本部门」这一档。

配置步骤

设置数据范围

  1. 进入 平台管理 → 角色管理
  2. 在角色列表中找到目标角色,点 更多 再找数据范围(行上直接露出的是编辑 / 适用组织)
  3. 在数据权限设置界面中,从下拉列表选择数据范围类型
  4. 需要限定若干组织时,在组织树上勾选,写入 sys_role_data_scope
  5. 点击 确定 保存配置

验证数据权限

配置生效后,拥有该角色的用户登录系统,在支持数据权限的模块页面中:

  • 列表数据显示会按照角色数据范围自动过滤
  • 查询统计结果也受数据范围限制
  • 数据导出结果同样遵循数据范围规则

工作原理

Forge Admin 后端通过 DataScopeInterceptor 拦截器实现数据过滤:

  1. 用户请求分页查询或列表查询接口
  2. 拦截器获取当前用户的所有角色及其数据权限配置
  3. 自动改写 Mapper XML 中的 SQL,追加 WHERE 条件
  4. 多个角色取各角色 data_scope数值最小一档(1 全部会压过 3 本组织)。不是「取最严」,也不是把两档行结果做并集。

与菜单权限的关系

数据权限与菜单权限是互补关系,两者缺一不可:

  • 菜单权限控制"能不能进这个页面,能不能点这个按钮"
  • 数据权限控制"在这个页面里能看到多少数据"

典型配置模式:

场景菜单权限数据权限
超级管理员全部菜单全部数据(1
组织负责人用户 / 角色等本组织及子组织(4
普通员工本人业务个人数据(5
跨组织协作者对应业务菜单5 + sys_role_data_scope 勾选组织

注意事项

  • 数据权限仅对查询类接口生效,新增/修改/删除由菜单权限控制
  • sys_role_data_scope 里勾选的组织如果被删掉,这条自定义范围会失效
  • 修改角色数据权限后,已登录用户需重新登录生效

相关文档