mybatis sql拦截 方法做java 数据权限(应公司要求,写个方案,记录在这里)

数据权限,一般就是作用于查询,规定用户能看到哪些数据。本次案例以通用的   本人,本部门,本公司,全部  来做,具体可以根据自己业务来灵活处理。

一.数据权限要设置到角色上(但要注意,一个用户可能是有多个角色的,对于某个模块的数据权限,要去角色中最高等级的权限)

1.定义数据权限类型,即哪些模块需要加数据权限。比如:员工模块

权限范围:

2.在后台管理操作上,对应数据权限的设置,模块信息就是从这里取的,然后进行设置保存到数据库。当然,此模块也可以做成数据保存到数据库。

3.后台保存后,会将角色的数据权限信息,存入到数据库,如下

二.定义数据范围注解

使用方法:在mapper查询上注解,如下

@DataScope(dataScopeType = DataScopeTypeEnum.EMPLOYEE,dataScopeWhereInType = DataScopeWhereInTypeEnum.EMPLOYEE, whereIndex = 0, joinSql = "e.id in (#employeeIds)")
List<EmployeeDTO> selectEmployeeList(Page page, @Param("queryDTO") EmployeeQueryDTO queryDTO);

三.定义一个业务处理类,来处理这些注解,并且,根据注解,来获取查询的数据权限,并拼接sql

1.使用 @PostConstruct来获取项目所有 使用了注解 @DataScope的方法,并存入缓存

2.编写拼接sql的方法

   

四. 拦截mybatis sql语句,然后根据 方法名,从业务处理类获取到使用的 @DataScope信息,调用业务处理类 getJoinSql 来根据权限拼接sql

 

以上则数据权限完成,之后哪里需要用到数据权限,就@DataScope即可。

方法思路就是这样,具体都可以根据自己的业务实现,无论是微服务系统还是单系统,都可以。当然,特别注意,对于权限的查询、角色、员工等信息的查询,最好提前缓存,直接从缓存获取,提高查询效率。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值