掌桥专利:专业的专利平台
掌桥专利
首页

一种基于Mybatis的动态数据权限控制方法、设备及介质

文献发布时间:2024-04-18 20:01:55


一种基于Mybatis的动态数据权限控制方法、设备及介质

技术领域

本申请涉及数据权限控制技术领域,尤其涉及一种基于Mybatis的动态数据权限控制方法、设备及介质。

背景技术

对于web(World Wide Web,全球广域网)服务来说,web服务后台系统是管理web服务的基石。而数据权限,在各个业务服务的业务需求中,都是一个必不可少的需求。常用的做法是将在具体业务服务中进行硬编码,当成具体业务需求来实现,但是随着业务系统的不断增多,也由于个人编码风格、技术水平等问题,往往导致服务混乱,数据权限实现多样,难以管理等一系列问题。

通过上述的分析,现有技术存在的问题及缺陷为:

若数据权限有变更,则需要开发人员根据需求修改代码,重新走发版流程,修改复杂,过程繁琐,缺乏灵活性。

发明内容

本申请实施例提供了一种基于Mybatis的动态数据权限控制方法、设备及介质,解决了现有技术中若数据权限有变更、则需要开发人员根据需求重新修改代码的问题。

第一方面,本申请实施例提供了一种基于Mybatis的动态数据权限控制方法,包括:获取客户端发出的请求数据库操作动作,并基于请求数据库操作动作,判断是否需要启用数据权限功能;其中,数据权限功能通过预设的权限配置方式配置;在需要启用数据权限功能的情况下,Mybatis拦截器拦截请求数据库操作动作的Mapper层数据操作,Mybatis拦截器查找数据库中预置的权限验证逻辑,对客户端的数据权限进行验证;在客户端的数据权限验证通过的情况下,Mybatis拦截器查找数据库中预置的过滤规则,执行数据库操作动作。

在本申请的一种实现方式中,Mybatis拦截器查找数据库中预置的权限验证逻辑,对客户端的数据权限进行验证,具体包括:解析请求数据库操作动作的Mapper层数据操作,以获取请求数据库操作动作中包含的客户端信息;基于请求数据库操作动作中包含的客户端信息,判断客户端是否具有用户授权;在确定客户端具有用户授权的情况下,确定客户端的数据权限验证通过。

在本申请的一种实现方式中,Mybatis拦截器查找数据库中预置的过滤规则,执行数据库操作动作,具体包括:步骤1:判断Mapper层数据操作是否是SELECT查询,若是,则执行下一步骤;步骤2:获取Mapper层数据操作对应的注解信息,或者匹配对应的权限方法;步骤3:在确定获取到注解信息的情况下配置注解项数据权限,从数据库查询数据权限模型;其中,注解项数据权限为通过注解信息来实现的数据权限;以及,在确定匹配到权限方法的情况下,从数据库查询待选择数据权限模型;步骤5:在确定配置注解项数据权限之后,判断注解项数据权限是否有数据权限的code;以及,判断是否查询到待选择数据权限模型;步骤6:在没有查询到待选择数据权限模型且配置的数据权限的code不为空,则根据数据权限的code获取待应用数据权限模型。步骤7:根据待应用数据权限模型,组装权限SQL语句逻辑;步骤8:将权限SQL语句逻辑提交数据库执行操作。

在本申请的一种实现方式中,方法还包括:若没有查询到待选择数据权限模型且配置的数据权限的code为空,则选择默认数据权限模型为待应用;若查询到待选择数据权限模型,则根据客户端的id确定待选择数据权限模型中的待应用数据权限模型。

在本申请的一种实现方式中,在Mybatis拦截器查找数据库中预置的权限验证逻辑,对客户端的数据权限进行验证之前,方法还包括:将注解信息、权限验证逻辑、过滤规则、客户端信息和数据库操作动作类型写入缓存;其中,数据库操作动作类型包括对数据的增加、删除、改动和查看;以及,预先配置Mybatis拦截器,将拦截器注册到缓存中。

在本申请的一种实现方式中,在Mybatis拦截器查找数据库中预置的权限验证逻辑,对客户端的数据权限进行验证之前,方法还包括:判断客户端的数据权限是否需要验证;在客户端的数据权限无需验证的情况下,直接执行数据库操作动作。

在本申请的一种实现方式中,方法还包括:在组装不成功的情况下,生成逻辑验证的异常提示消息发送给管理端。

在本申请的一种实现方式中,预设的权限配置方式包括管理端前置化平台配置。

第二方面,本申请实施例还提供了一种基于Mybatis的动态数据权限控制设备,设备包括至少一个处理器;以及,与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够:获取客户端发出的请求数据库操作动作,并基于请求数据库操作动作,判断是否需要启用数据权限功能;其中,数据权限功能通过预设的权限配置方式配置;在需要启用数据权限功能的情况下,Mybatis拦截器拦截请求数据库操作动作的Mapper层数据操作,Mybatis拦截器查找数据库中预置的权限验证逻辑,对客户端的数据权限进行验证;其中,权限验证逻辑由管理端通过预设的权限配置方式配置;在客户端的数据权限验证通过的情况下,Mybatis拦截器查找数据库中预置的过滤规则,执行数据库操作动作。

第三方面,本申请实施例还提供了一种基于Mybatis的动态数据权限控制的非易失性计算机存储介质,存储有计算机可执行指令,其特征在于,计算机可执行指令设置为:获取客户端发出的请求数据库操作动作,并基于请求数据库操作动作,判断是否需要启用数据权限功能;其中,数据权限功能通过预设的权限配置方式配置;在需要启用数据权限功能的情况下,Mybatis拦截器拦截请求数据库操作动作的Mapper层数据操作,Mybatis拦截器查找数据库中预置的权限验证逻辑,对客户端的数据权限进行验证;其中,权限验证逻辑由管理端通过预设的权限配置方式配置;在客户端的数据权限验证通过的情况下,Mybatis拦截器查找数据库中预置的过滤规则,执行数据库操作动作。

本申请实施例提供了一种基于Mybatis的动态数据权限控制方法、设备及介质,通过将数据权限前置化,可视化,解决了数据权限硬编码、难维护、管理困难的问题。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1为本申请实施例提供的一种基于Mybatis的动态数据权限控制方法流程图;

图2为本申请实施例提供的Mybatis拦截器执行逻辑的流程图;

图3为本申请实施例提供的一种基于Mybatis的动态数据权限控制设备内部结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请实施例提供了一种基于Mybatis的动态数据权限控制方法、设备及介质,解决了现有技术中数据权限硬编码、难维护、管理困难的问题。

下面通过附图对本申请实施例提出的技术方案进行详细的说明。

图1为本申请实施例提供的一种基于Mybatis的动态数据权限控制方法流程图。如图1所示,本申请实施例提供的一种基于Mybatis的动态数据权限控制方法,具体包括以下步骤:

步骤101、获取客户端发出的请求数据库操作动作,并基于请求数据库操作动作,判断是否需要启用数据权限功能。

其中,数据权限功能通过预设的权限配置方式配置。

为方便理解,本申请给出一个具体的示例,一位销售人员登录公司系统,若只是查看天气等不需要启用数据权限功能的内容,即不需要部署服务或者修改代码,若查看销售合同、采购合同等,则需要启用数据权限功能。

步骤102:在需要启用数据权限功能的情况下,Mybatis拦截器拦截请求数据库操作动作的Mapper层数据操作,Mybatis拦截器查找数据库中预置的权限验证逻辑,对客户端的数据权限进行验证;

需要说明的是,Mapper层即为数据持久化层,Mapper层的作用是对数据库进行数据持久化操作。

在上述示例中,销售人员想要查询销售合同,点击查看销售合同,启用数据权限功能,调用Mapper层的接口,通过Mapper层对数据库进行持久化操作、向数据库发送SQL语句,对数据库执行查看的操作,Mybatis拦截器拦截该操作,需要验证该销售人员的身份,对客户端的数据权限进行验证这里可以理解为对该销售人员的数据权限进行验证,下文不再赘述,即销售人员需要使用自己的账号登录公司系统。

作为一种可选的实施例,Mybatis拦截器查找数据库中预置的权限验证逻辑,对客户端的数据权限进行验证,具体可以包括:

步骤1021:解析请求数据库操作动作的Mapper层数据操作,以获取请求数据库操作动作中包含的客户端信息;

步骤1022:基于请求数据库操作动作中包含的客户端信息,判断客户端是否具有用户授权;

步骤1023:在确定客户端具有用户授权的情况下,确定客户端的数据权限验证通过。

上述示例中,该销售人员输入自己的账号和密码,经验证获取用户授权;

若经验证没有获得用户授权,则按照本身的逻辑执行,此处本身的逻辑可以为显示验证错误,返回公司官网默认的页面。

步骤103:在客户端的数据权限验证通过的情况下,Mybatis拦截器查找数据库中预置的过滤规则,执行数据库操作动作。

作为一种可选的实施例,Mybatis拦截器查找数据库中预置的过滤规则,执行数据库操作动作,参考图2,具体可以包括:

步骤1031:判断Mapper层数据操作是否是SELECT查询,若是,则执行下一步骤;

本步骤中,Mybatis拦截器只针对SELECT查询,SELECT查询包括查看、增加、删除和改动操作,每个操作的语句中的关键字不一样,Mybatis拦截器通过关键字来判断是否是SELECT查询,若非SELECT查询不需要执行后续逻辑,按照本身的逻辑执行,此处本身的逻辑可以为显示操作无效。

步骤1032:获取Mapper层数据操作对应的注解信息,或者匹配对应的权限方法;

为方便理解,本步骤作以下解释,注解信息具体可以为DataAuth(数据权限模型的注释)自定义注解信息,是根据用户需要编写的注解,其中,注解(Annotation),也叫元数据,一种代码级别的说明,它是JDK(Java Development Kit,Java开发工具包)1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次,它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释,可在类加载、编译、运行时被读取,并根据这些信息执行相应的处理。

管理人员在数据库中创建两张表:用户角色表和数据权限表,用户角色表的内容为根据用户编写的自定义注解信息;数据权限表中描写不同的权限方法,也就是说,可以有两种验证方式,既可以通过注解信息验证,也可以通过权限方法验证。

步骤1033:在确定获取到注解信息的情况下配置注解项数据权限,从数据库查询数据权限模型;其中,注解项数据权限为通过注解信息来实现的数据权限;

以及,在确定匹配到权限方法的情况下,从数据库查询待选择数据权限模型;

为方便理解,本步骤作以下解释,数据权限模型具体可以为RBAC(Role-BasedAccess Control,基于角色的访问控制),表示为控制一个用户能访问哪些资源。

本步骤中的第一段为注解信息验证,具体实施时,首先解析注解项数据权限,然后将解析出来的信息配置到从数据库查询的数据权限模型中。

本步骤中的第二段为权限方法验证,根据客户端id对应的权限方法id,从数据库查询待选择的数据权限模型。

步骤1035:在确定配置注解项数据权限之后,判断注解项数据权限是否有数据权限的code;

以及,判断是否查询到待选择数据权限模型;

本步骤中的第一段为注解信息验证,将解析出来的信息进一步配置到数据权限模型的code中。

本步骤中的第二段为权限方法验证。

步骤1036:在没有查询到待选择数据权限模型且配置的数据权限的code不为空,则根据数据权限的code获取待应用数据权限模型。

进一步的,方法还可以包括:

步骤1036’:若没有查询到待选择数据权限模型且配置的数据权限的code为空,则选择默认数据权限模型为待应用;

步骤1036”:若查询到待选择数据权限模型,则根据权限方法的id确定待选择数据权限模型中的待应用数据权限模型。

通过步骤1036、1036’和1036”,获取待应用数据权限模型提供了三种方式,一种为根据code获取到的数据权限模型,一种根据权限方法的id获取到的数据权限模型,若两者都验证成功,则返回其中一种数据权限模型,若两者都没有验证成功,则选择默认的数据权限模型。

步骤1037:根据待应用数据权限模型,组装权限SQL语句逻辑;

在上述的示例中,公司可以包含采购、销售、管理等部门,而对于整个公司来说,不同部门不同职能的人员对数据权限都有自己的要求,若只有销售部门预置了向数据库发送的SQL语句、权限验证逻辑,首先可以获取原本的查询SQL语句,然后根据获取到的待应用数据权限模型,组装SQL语句,比如串联字符串,将SQL语句逻辑增强,使采购、管理等部门,都可以使用,最终都可以获取数据权限模型。这样不同的部门、不同的公司以及不同的应用系统都可以组装权限SQL语句逻辑,使用灵活,减少开发成本,开发人员不需要再额外关注数据权限的问题,减少代码的侵入性。

步骤1038:将权限SQL语句逻辑提交数据库执行操作。

上述若两者都验证成功,则返回其中一种数据权限模型,即最后该销售人员看到了自己想要查看的销售合同数据。

若两者都没有验证成功,则选择默认的数据权限模型,即最后该销售人员没有看到自己想要查看的销售合同数据。

至此,可以得出Mybatis拦截器的工作流程,Mybatis拦截器拦截器拦截到Mapper层数据操作,然后执行增强后的SQL语句逻辑,最后提交数据库执行操作,拦截器执行完毕,实现数据权限功能。

进一步的,在Mybatis拦截器查找数据库中预置的权限验证逻辑,对客户端的数据权限进行验证之前,方法还可以包括:

判断客户端的数据权限是否需要验证;

在客户端的数据权限无需验证的情况下,直接执行数据库操作动作。

本步骤中,客户端的数据权限不需要验证包含两种情况,一种是上述描写中,查看不需要启用数据权限功能的内容,另外一种是,公司可以统一选择开启或者关闭数据权限功能,比如,在不启用数据权限功能的情况下,所有用户都可以对合同进行查看等操作,直接执行原接口请求的数据库操作动作。

优选的,在Mybatis拦截器查找数据库中预置的权限验证逻辑,对客户端的数据权限进行验证之前,方法还可以包括:

将注解信息、权限验证逻辑、过滤规则、客户端信息和数据库操作动作类型写入缓存;其中,数据库操作动作类型包括对数据的增加、删除、改动和查看;

以及,预先配置Mybatis拦截器,将拦截器注册到缓存中。

本步骤中,为了提高效率,可以将一些资源(比如客户端信息)放到Redis(RemoteDictionary Server,远程字典服务提高性能),也可以换成其他的缓存;数据库操作动作类型即上述的SELECT查询。

作为另一种可选的实施例,方法还可以包括:

在组装不成功的情况下,生成逻辑验证的异常提示消息发送给管理端。

本步骤中,若获得了根据code获取到的数据权限模型,或者根据权限方法的id获取到的数据权限模型,但数据权限模型没有增强信息,则执行原数据库操作动作。

优选的,预设的权限配置方式可以包括管理端前置化平台配置。

管理端在不更改代码的情况下实现了对数据权限的增删改,使数据权限能够前置化、可视化配置,该页面上显示的数据权限名称、权限编号、权限字段和规则类型,可根据需要自定义。并且可根据角色分配已经自定义好的数据权限,角色则跟具体用户绑定,用以实现同一职能的数据权限需求。避免了数据权限控制的硬编码、修改繁琐、实现死板、多次发版等一系列问题,可以满足业务需求中常见的数据权限需要,对不同角色的用户请求数据资源进行了动态的权限控制。

综上,本申请实施例的一种基于Mybatis的动态数据权限控制方法,第一方面,本申请实施例可以将数据权限前置化,从后台移到前台,通过可视化实现可配置化,对不同角色用户请求数据资源进行动态的权限控制;相比于传统做法,解决了数据权限硬编码、难维护、管理困难等问题;第二方面,本申请实施例可以组合SQL语句,增强逻辑,减少开发成本,增强了数据权限的灵活性、扩展性,减少代码的侵入性;第三方面,本申请实施例可以提前将客户端信息等写入缓存,以此来优化控制数据权限的速度;第四方面,本申请实施例可以在不启用数据权限功能的情况下,根据需要统一关闭数据权限功能。

以上为本申请提出的方法实施例。基于同样的发明构思,本申请实施例还提供了一种基于Mybatis的动态数据权限控制设备,其结构如图3所示。

图3为本申请实施例提供的一种基于Mybatis的动态数据权限控制设备内部结构示意图。如图3所示,设备包括:

至少一个处理器201;

以及,与至少一个处理器通信连接的存储器202;

其中,存储器202存储有可被至少一个处理器执行的指令,指令被至少一个处理器201执行,以使至少一个处理器201能够:

获取客户端发出的请求数据库操作动作,并基于请求数据库操作动作,判断是否需要启用数据权限功能;其中,数据权限功能通过预设的权限配置方式配置;

在需要启用数据权限功能的情况下,Mybatis拦截器拦截请求数据库操作动作的Mapper层数据操作,Mybatis拦截器查找数据库中预置的权限验证逻辑,对客户端的数据权限进行验证;其中,权限验证逻辑由管理端通过预设的权限配置方式配置;

在客户端的数据权限验证通过的情况下,Mybatis拦截器查找数据库中预置的过滤规则,执行数据库操作动作。

本申请的一些实施例提供的对应于图1的一种基于Mybatis的动态数据权限控制的非易失性计算机存储介质,存储有计算机可执行指令,计算机可执行指令设置为:

获取客户端发出的请求数据库操作动作,并基于请求数据库操作动作,判断是否需要启用数据权限功能;其中,数据权限功能通过预设的权限配置方式配置;

在需要启用数据权限功能的情况下,Mybatis拦截器拦截请求数据库操作动作的Mapper层数据操作,Mybatis拦截器查找数据库中预置的权限验证逻辑,对客户端的数据权限进行验证;其中,权限验证逻辑由管理端通过预设的权限配置方式配置;

在客户端的数据权限验证通过的情况下,Mybatis拦截器查找数据库中预置的过滤规则,执行数据库操作动作。

本申请中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于物联网设备和介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本申请实施例提供的系统和介质与方法是一一对应的,因此,系统和介质也具有与其对应的方法类似的有益技术效果,由于上面已经对方法的有益技术效果进行了详细说明,因此,这里不再赘述系统和介质的有益技术效果。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

相关技术
  • 堆叠式半导体装置及其制造方法
  • 半导体器件的堆叠多晶硅栅结构的制造方法
  • 堆叠结构微型LED显示器的制备方法
  • 一种超薄多金属纳米片堆叠组装材料的制备方法及其应用
  • 堆叠式电容器、半导体存储器件及制备方法
  • 堆叠半导体电容器及其制备方法
技术分类

06120116573871