使用 HZERO 数据权限
数据权限的目的是为了控制用户的可访问数据的功能。 数据权限提供在系统使用过程中,能够实时、动态、灵活的调整用户、角色或者其他维度的可访问数据。 数据权限基于表来进行权限控制,可以添加其他更细的条件来控制权限控制范围,例如可以通过服务、租户等条件来做过滤。 数据权限功能主要分为两个模块,一个是权限控制范围,一个是权限控制规则,在中切换两个功能。
- 菜单路径:系统管理 > 数据权限
权限规则列表
字段说明:
字段名称 | 字段描述 | 必输 | 可修改 |
---|---|---|---|
租户 | 权限规则所属租户 | 是 | 否 |
规则编码 | 权限规则的唯一标识 | 是 | 否 |
规则名称 | 权限规则的名称 | 是 | 否 |
规则类型 | 可选两种规则,SQL :为查询语句添加条件限制;数据库前缀 :为查询语句表添加数据库前缀 |
是 | 是 |
SQL | 替换的SQL内容或者数据库前缀 | 是 | 是 |
状态 | 启用和禁用两种状态,当为禁用时不能使用该权限规则 | 否 | 是 |
描述 | 权限规则的的描述信息 | 否 | 是 |
创建权限规则
点击创建权限规则
编辑权限规则
在权限规则行操作列上点击编辑
按钮编辑权限规则
删除权限规则
- 在权限规则行操作列上点击
删除
按钮 - 在提示中确认删除权限归规则
权限范围列表
字段说明:
字段名称 | 字段描述 | 必输 | 可修改 |
---|---|---|---|
租户 | 权限范围所属租户 | 是 | 否 |
权限表名 | 限定范围,确定到具体表 | 是 | 是 |
SQLID | Sql的全限定名,默认Mapper查询接口的package.ClassName.methodName |
否 | 是 |
服务名 | 仅在指定服务内生效,如果不指定则全局生效 | 否 | 是 |
状态 | 启用和禁用两种状态。当为禁用时不能使用该权限范围 | 否 | 是 |
自定义规则标识 | SQL是否支持自定义SQL拼接,即在代码中自己传入要注入的SQL。默认为否 | 否 | 是 |
描述 | 权限范围的描述信息 | 否 | 是 |
创建权限范围
点击创建权限范围
编辑权限范围
在权限范围行操作列上点击编辑
按钮编辑权限范围
点击添加权限规则,实现数据权限应用
删除权限规则
- 在权限范围行操作列上点击
删除
按钮 - 在提示中确认删除权限归范围
数据权限应用
定义好数据权限规则和范围之后,在权限范围编辑页面可以将权限规则和权限范围进行关联。
数据权限处理过程主要分为表前缀和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}) |
数据权限常见问题
- 数据权限使用第三方的SQL解析工具,该工具不支持数据库方言,即无法解析方言SQL,会导致数据权限功能失效。
- 数据权限应用时所有操作都通过Redis缓存进行,所以要保证平台服务和应用服务的Redis使用的时同一个,而且直接写入数据库的数据是无法生效的,需要通过重启平台服务或者在页面上重新保存一下将配置写入缓存。