• 使用 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})

    数据权限常见问题