使用mybatis plus自定义拦截器,实现数据权限

需求

为了增强程序的安全性,需要在用户访问数据库的时候进行权限判断后选择性进行判断是否需要增强sql,来达到限制低级别权限用户访问数据的目的.

根据业务需要,这里将角色按照数据范围做权限限定.比如,角色如下:

编号

名称

描述

1

管理员

全部数据权限

2

普通角色

自定义数据权限

3

部门权限

部门权限

4

部门及以下数据权限

部门及以下数据权限

5

本人数据

本人数据

部门如下:

编号

父id

名称

描述

1

0

北京总公司

101

1

北京公司1

102

1

北京公司2

10101

101

丰台公司1

10102

101

丰台公司2

10201

102

昌平公司1

10202

102

昌平公司2

思路:

  1. 可以模仿 PageHelper.startPage 用来声明哪些操作需要做范围限制
  2. 定义 Mybatis plus自定义拦截器Interceptor,用于每次拦截查询sql语句,附带数据范围权限sql条件
  3. 因为使用了 PageHelper.startPage 分页插件的使用,先计算总数,怎么在这之前拦截,需要拦截多次
  4. 考虑到Mybatis拦截器能够拦截SQL执行的整个过程,因为我们可以考虑SQL执行之前,对SQL进行重写,从而达到数据行权限的目的。

步骤:

  1. 声明datescope

    protected static final ThreadLocal threadLocal = new ThreadLocal();
    /**

    • 设置权限标识
      /
      public static void startDataScope(){
      threadLocal.set(SecurityConstants.DATA_SCOPE);
      }
      /
      *
    • 获取权限标识
      /
      public static String getDataScope(){
      return threadLocal.get();
      }
      /
      *
    • 清除权限标识
      */
      public static void cleanDataScope(){
      threadLocal.remove();
      }
      复制代码
  2. 定义 Mybatis plus自定义拦截器

    /**

    • @author zhc

    • @description 数据权限插件

    • @date 2022-04-01 17:03
      */
      

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值