数据权限配置
数据权限是 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)。没有「本部门」这一档。
配置步骤
设置数据范围
- 进入 平台管理 → 角色管理
- 在角色列表中找到目标角色,点 更多 再找数据范围(行上直接露出的是编辑 / 适用组织)
- 在数据权限设置界面中,从下拉列表选择数据范围类型
- 需要限定若干组织时,在组织树上勾选,写入
sys_role_data_scope - 点击 确定 保存配置
验证数据权限
配置生效后,拥有该角色的用户登录系统,在支持数据权限的模块页面中:
- 列表数据显示会按照角色数据范围自动过滤
- 查询统计结果也受数据范围限制
- 数据导出结果同样遵循数据范围规则
工作原理
Forge Admin 后端通过 DataScopeInterceptor 拦截器实现数据过滤:
- 用户请求分页查询或列表查询接口
- 拦截器获取当前用户的所有角色及其数据权限配置
- 自动改写 Mapper XML 中的 SQL,追加
WHERE条件 - 多个角色取各角色
data_scope的数值最小一档(1全部会压过3本组织)。不是「取最严」,也不是把两档行结果做并集。
与菜单权限的关系
数据权限与菜单权限是互补关系,两者缺一不可:
- 菜单权限控制"能不能进这个页面,能不能点这个按钮"
- 数据权限控制"在这个页面里能看到多少数据"
典型配置模式:
| 场景 | 菜单权限 | 数据权限 |
|---|---|---|
| 超级管理员 | 全部菜单 | 全部数据(1) |
| 组织负责人 | 用户 / 角色等 | 本组织及子组织(4) |
| 普通员工 | 本人业务 | 个人数据(5) |
| 跨组织协作者 | 对应业务菜单 | 5 + sys_role_data_scope 勾选组织 |
注意事项
- 数据权限仅对查询类接口生效,新增/修改/删除由菜单权限控制
sys_role_data_scope里勾选的组织如果被删掉,这条自定义范围会失效- 修改角色数据权限后,已登录用户需重新登录生效
相关文档
- RBAC 权限配置指南 — 完整权限体系配置
- 角色管理 — 角色 CRUD 操作
