什么是数据权限,分享数据权限的实现思路和开发过程详解?

营销圈公众号引导关注

背景介绍

最近项目中有接触到数据权限这个需求,所以在架构中增加了数据权限的组件,该组件可以搭配业务需求来灵活调用,实现基本的数据展示要求。

项目框架本身是基于Spring Cloud的微服务架构开发的,很多组件也是根据公司的业务发展需要,而不断的扩充组件。下面说一下设计数据权限的整体思路:

通过定义不同数据权限的底层实现(就是具体的拼接SQL语句逻辑),根据角色与数据权限范围相关联;再通过人员与角色的关联关系,就可以获取人员的数据权限配置。然后在需要增加数据权限的业务接口中增加数据权限的注解(注解中提供相关关联表别名),通过注解把数据权限拼接好的SQL作为参数传递到Mybatis持久层,最终影响到业务SQL。

下面跟大家分享一下数据权限具体的实现思路。

实现步骤

什么是数据权限,分享数据权限的实现思路和开发过程详解?

1.首先数据权限主要是通过用户和角色之间的关系,来实现基本的数据展示权限配置,权限范围暂定以下几种:全部数据权限、自定义数据权限、本部门数据权限、本部门及管辖部门数据权限、本人数据权限。

2.角色先关联权限范围,再人员关联角色,底层的这层关系就有了。然后就是根据不同的数据权限范围定义具体的逻辑实现(提供需要拼接的SQL)。

  • 首先是全部数据权限,这里不做处理,直接返回空字符串。
  • 自定义数据权限,因为这层关系的实现可以复杂也可以简单,鉴于还没有具体的需求下来,所以这里只针对于角色和部门的关联关系作处理,范围人员关联角色,角色关联的部门编号。
  • 本部门数据权限,获取人员关联部门编号作为参数传入。
  • 本部门及以下数据权限,获取人员关联部门编号以及根据部门祖级列表结构(01,0101,010101格式)递归获取所有关联子部门编号作为参数传入。
  • 本人数据权限,人员编号作为参数传入。

3.创建一个注解,作为数据权限的入口,因为数据权限的底层需要拼接SQL语句,并且关联部门表和用户表,所以需要传递用户表和部门表的别名。

什么是数据权限,分享数据权限的实现思路和开发过程详解?

4.再编写一个切面,作为注解的核心逻辑实现,其实实现的就是上述说的各种数据权限范围的具体实现,并且返回需要拼接的SQL,给需要的业务接口使用。下面贴出局部代码什么是数据权限,分享数据权限的实现思路和开发过程详解?

切面入口什么是数据权限,分享数据权限的实现思路和开发过程详解?

根据数据权限拼接SQL局部代码

5.业务模块调用,只需要在业务模块的控制器处增加数据权限注解,并且根据实际情况提供部门表别名或者用户表别名的标识即可,为什么两个参数不是必填的呢,这个是根据具体的业务来定,比如你希望这个业务只要部门相关数据权限控制就可以了,那么用户表的别名就不需要提供,部门表的同理。

什么是数据权限,分享数据权限的实现思路和开发过程详解?

6.那么拼接好的SQL如何才能拼接到业务SQL中去呢?首先业务接口提供的参数实体类需要继承一个自定义的实体类对象,这个自定义的实体类对象在切面处理类中会被获取,然后把拼接好的SQL作为参数并入到业务接口参数实体类中去,最终作为一个参数传入到了Mybatis处理层。

什么是数据权限,分享数据权限的实现思路和开发过程详解?

7.既然参数已经有了,那么在Mybatis的数据处理层中添加参数即可。什么是数据权限,分享数据权限的实现思路和开发过程详解?

Mapper文件中提供参数代码片段

以上就是基于Spring Cloud的微服务架构中添加自定义数据权限组件的全过程分享,希望整体思路可以给大家带来参考。

头条新手,也是技术分享新手,文章条理性和结构性可能存在很多问题,还望大家不吝指教,指出问题所在。

好了,这篇文章的内容营销圈就和大家分享到这里,如果大家对网络推广引流和网络创业项目感兴趣,可以添加微信:Sum8338 备注:营销圈引流学习,我拉你进直播课程学习群,每周135晚上都是有实战的推广引流技术和网络创业项目课程分享,当然是免费学!

版权声明:本站部分文章来源互联网用户自发投稿,主要目的在于分享信息,版权归原作者所有,不承担相关法律责任。如有侵权请联系我们反馈邮箱yingxiaoo@foxmail.com,我们将在7个工作日内进行处理,如若转载,请注明本文地址:https://www.yingxiaoo.com/117043.html