• 数据权限客户端


    一、简介

    1.1 概述

    数据屏蔽客户端是平台服务数据屏蔽功能的客户端应用组件,旨在在微服务应用上拦截配置的全局数据库表或特定SQL ID下数据库表的SQL拦截应用,以便在系统使用过程中去控制登录用户的数据权限。

    1.2 原理

    1.3 组件坐标

    <dependency>
        <groupId>org.hzero.boot</groupId>
        <artifactId>hzero-boot-platform</artifactId>
        <version>${hzero.boot.version}</version>
    </dependency>
    

    1.4 功能特性

    二、使用说明

    2.1 常用配置

    hzero:
      data:
        permission:
           enabled: true # 启用(默认开启)
          db-owner: ${HZERO_DB_OWNER:} # 默认数据库OWNER,如SqlServer需要配置dbo
    

    2.2 基本使用

    2.2.1 新建数据权限规则

    如图所示,规则类型分为数据库前缀SQL两种,SQL即为将要拼接在SQL中的条件,数据库前缀为拼在表前的数据库前缀名,用以支持跨DB查询。

    2.2.2 数据权限规则占位符

    数据权限规则中的SQL字段,在不同的规则类型下,可以通过不同的占位符表达不同的动态意思。

    SQL
    数据库前缀

    2.2.3 新建数据权限范围

    如图所示,权限范围含有租户,表名,SQLID,服务名,自定义规则标识等几个字段。

    2.2.4 权限范围应用继承关系

    当权限范围中存在多个相同的表时,处理多个相同表名的权限范围,返回应用层级最小的数据权限信息,判断应用层级大小的规则如下:
    tenantId > tenantId + serviceName > tenantId + sqlId > tenantId + serviceName + sqlId

    2.2.5 数据权限选择权限规则

    一个权限范围只能选择一个数据库前缀类型的规则,可以选择多个SQL类型的规则。

    2.3 自定义规则

    如果要使用自定义规则,首先需要在数据屏蔽范围维护页面上对对应的表开启自定义规则标识,然后再在代码中使用PermissionDataHelper.startPermission方法。具体使用如下:

    // 假设hmdm_company表已经被维护了数据屏蔽范围,同时启用了自定义规则
    // 定义一个map,key为表名,value为表所要自定义传入的sql
    Map<String,String> tableSqlMap = new HashMap<>();
    // sql值,具体sql怎么来可以自己拼
    String sql = "xxx";
    tableSqlMap.put("hmdm_company",sql);
    // 调用自定义方法
    PermissionDataHelper.startPermission(tableSqlMap);
    return companyMapper.selectCompany();
    
    public class TestInteceptor implements FilterSqlInterceptor{
    
      /**
      * 继承后重写此方法,可以修改数据屏蔽规则中将要被替换的规则
      */
      public Map<Table,PermissionRangeVO> process(CustomUserDetails customUserDetails, Map<Table, PermissionRangeVO> currentFilterSqls){
          ...
      }
    }
    

    三、定制化开发

    数据屏蔽客户端顶层依赖于接口而非具体实现,使用者若对某一个接口有特殊需求,可重新实现接口并覆盖默认配置即可。
    PermissionSqlRepository:数据屏蔽sql权限信息获取接口。

    四、版本更新日志

    版本 0.1.0-SNAPSHOT [2018-08-06]

    版本 0.2.0-SNAPSHOT [2018-09-16]

    版本 0.3.0-SNAPSHOT [2018-10-26]

    展望