数据权限规则`
数据权限的目的是为了控制用户的可访问数据的功能。 数据权限提供在系统使用过程中,能够实时、动态、灵活的调整用户、角色或者其他维度的可访问数据。 数据权限基于表来进行权限控制,可以添加其他更细的条件来控制权限控制范围,例如可以通过服务、租户等条件来做过滤。 数据权限功能主要分为两个模块,一个是权限控制范围,一个是权限控制规则,在中切换两个功能。
- 菜单路径:
系统管理
>数据权限规则
数据权限规则列表
列表字段:
- 租户:权限规则所属租户(平台层有该字段,租户层没有该字段)
- 规则编码:权限规则的唯一标识
- 规则名称:权限规则的名称
- 规则类型:可选两种规则,
SQL
:为查询语句添加条件限制;数据库前缀
:为查询语句表添加数据库前缀 - SQL:替换的SQL内容或者数据库前缀
- 状态:启用和禁用两种状态,当为禁用时不能使用该权限规则
- 描述:权限规则的的描述信息
- 操作:可进行编辑和删除操作
创建权限规则
操作步骤:系统管理
> 数据权限规则
,点击按钮,输入完成信息,点击确定
按钮,创建权限规则完成。
必输字段:
- 规则编码:权限规则的唯一标识
- 规则名称:权限规则的名称
- 规则类型:可选两种规则,
SQL
:为查询语句添加条件限制;数据库前缀
:为查询语句表添加数据库前缀 - SQL:替换的SQL内容或者数据库前缀
- 租户:权限规则所属租户(平台层有该字段,租户层没有该字段)
非必输字段:
- 描述:权限规则的的描述信息
编辑权限规则
操作步骤:系统管理
> 数据权限规则
,在权限规则行操作列上点击编辑
按钮,进入修改屏蔽规则界面,输入完成信息后点击确定
按钮,编辑完成。
不可修改字段:
- 规则编码:权限规则的唯一标识
- 规则类型:可选两种规则,
SQL
:为查询语句添加条件限制;数据库前缀
:为查询语句表添加数据库前缀 - 租户:权限规则所属租户(平台层有该字段,租户层没有该字段)
必输字段:
- 规则名称:权限规则的名称
- SQL:替换的SQL内容或者数据库前缀
非必输字段:
- 描述:权限规则的的描述信息
删除权限规则
操作步骤:进入系统管理
> 数据权限规则
- 在权限规则行操作列上点击
删除
按钮 - 在提示中确认删除权限归规则
权限范围列表
操作步骤:进入系统管理
> 数据权限规则
界面,点击权限范围
tab页
字段说明:
- 租户:权限范围所属租户(平台层有该字段,租户层没有该字段)
- 屏蔽表名:屏蔽的表的名称
- SQLID:Sql的全限定名,默认Mapper查询接口的
package.ClassName.methodName
- 服务名:仅在指定服务内生效,如果不指定则全局生效
- 状态:启用和禁用两种状态。当为禁用时不能使用该权限范围
- 自定义规则标识:SQL是否支持自定义SQL拼接,即在代码中自己传入要注入的SQL。默认为否
- 描述:权限范围的描述信息
- 操作:可进行编辑和删除操作
创建权限范围
操作步骤:进入系统管理
> 数据权限规则
界面,点击权限范围
tab页,
点击按钮,输入完成信息,点击确定
按钮,创建权限范围完成。
必输字段:
- 租户:权限范围所属租户(平台层有该字段,租户层没有该字段)
- 屏蔽表名:屏蔽的表的名称
非必输字段:
- SQLID:Sql的全限定名,默认Mapper查询接口的
package.ClassName.methodName
- 服务名:仅在指定服务内生效,如果不指定则全局生效
- 状态:启用和禁用两种状态。当为禁用时不能使用该权限范围
- 自定义规则标识:SQL是否支持自定义SQL拼接,即在代码中自己传入要注入的SQL。默认为否
- 描述:权限范围的描述信息
编辑权限范围
操作步骤:进入系统管理
> 数据权限规则
界面,点击权限范围
tab页,
在权限范围行操作列上点击编辑
按钮编辑权限范围
点击添加权限规则,实现数据权限应用
删除权限规则
操作步骤:进入系统管理
> 数据权限规则
界面,点击权限范围
tab页
- 在权限范围行操作列上点击
删除
按钮 - 在提示中确认删除权限归范围
数据权限应用
定义好数据权限规则和范围之后,在权限范围编辑页面可以将权限规则和权限范围进行关联。
数据权限处理过程主要分为表前缀和SQL,例如现在有一个屏蔽范围拦截hpfm_tenant
这张表,然后规则类型是表前缀,例如hzero-platform
,那么SQL的转换为:
-- 原Sql
SELECT * FROM hpfm_tenant
-- 执行SQL
SELECT * FROM hzero_platform.hpfm_tenant
如果规则类型是SQL,例如tenant_num like 'HZERO%'
,那么SQL的转换为:
-- 原Sql
SELECT * FROM hpfm_tenant
-- 执行SQL
SELECT * FROM (SELECT * FROM hpfm_tenant WHERE tenant_num like 'HZERO%') T
数据权限规则的SQL中支持参数替换,支持的参数主要分为一下几种:
参数格式 | 描述 | 示例 |
---|---|---|
#{上下文参数} |
当前SQL执行时传入 MyBatis Mapper 的参数 | xxx_id = #{xxxId} |
#{当前用户信息} |
当前DetailsHelper.getUserDetails() 返回对象内的参数 |
role_id = #{roleId} |
#{tableAlias} |
拦截表的表别名 | #{tableAlias}.column1 |
#{roleMergeIds} |
如果开启角色合并,返回合并角色列表,如果没有开启,返回当前角色,多个以逗号分隔 | role_id in (#{roleMergeIds}) |
#{additionInfo.KEY} |
如果当前用户使用的数据层级配置,则获取对应KEY 的值 |
company_id = #{additionInfo.COMPANY} |
数据权限常见问题
- 数据权限使用第三方的SQL解析工具,该工具不支持数据库方言,即无法解析方言SQL,会导致数据权限功能失效。
- 数据权限应用时所有操作都通过Redis缓存进行,所以要保证平台服务和应用服务的Redis使用的时同一个,而且直接写入数据库的数据是无法生效的,需要通过重启平台服务或者在页面上重新保存一下将配置写入缓存。