CN112685451A - 数据查询处理方法、装置、计算机设备及存储介质 - Google Patents
数据查询处理方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN112685451A CN112685451A CN202011606830.0A CN202011606830A CN112685451A CN 112685451 A CN112685451 A CN 112685451A CN 202011606830 A CN202011606830 A CN 202011606830A CN 112685451 A CN112685451 A CN 112685451A
- Authority
- CN
- China
- Prior art keywords
- query
- user
- target
- parameter
- code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 25
- 230000007246 mechanism Effects 0.000 claims abstract description 159
- 230000008520 organization Effects 0.000 claims abstract description 83
- 238000000034 method Methods 0.000 claims abstract description 20
- 238000013475 authorization Methods 0.000 claims abstract description 17
- 238000005516 engineering process Methods 0.000 claims description 25
- 238000012545 processing Methods 0.000 claims description 25
- 235000006719 Cassia obtusifolia Nutrition 0.000 claims description 16
- 235000014552 Cassia tora Nutrition 0.000 claims description 16
- 244000201986 Cassia tora Species 0.000 claims description 16
- 238000004590 computer program Methods 0.000 claims description 14
- 238000006243 chemical reaction Methods 0.000 claims description 12
- 238000007726 management method Methods 0.000 description 14
- 230000006870 function Effects 0.000 description 12
- 238000013461 design Methods 0.000 description 6
- 238000011161 development Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000009545 invasion Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种数据查询处理方法、装置、计算机设备及存储介质,以解决传统的数据权限控制方案中适用性不强的技术问题。方法部分包括:当用户登录之后,根据用户的标识信息,获取用户有权访问机构的机构代码;通过预先配置的拦截器实时对用户的数据库查询操作进行拦截,以获取数据库查询操作的初始查询参数;根据机构代码和初始查询参数获取目标查询参数,目标查询参数包括授权查询属性,授权查询属性用于授权查询机构代码对应的数据;执行包含目标查询参数的数据库查询操作,以对机构代码对应的数据进行查询。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种数据查询处理方法、装置、计算机设备及存储介质。
背景技术
权限管理是业务系统中常见的功能,一般可以将权限管理分为功能权限管理和数据权限管理。功能权限管理用于控制用户是否有执行某一个操作的权限,比如能否看到某一个菜单、按钮,或者能否调用某个接口、访问某个URL等,用户不一定指真实的用户,也可以指其他的系统,如一个系统调用另一个系统的接口,举个具体例子,教师能进入查看成绩的菜单,而学生看不到。数据权限管理用于控制用户有权限访问哪些资源,比如不同的用户都能看到某个菜单,但看到的内容范围不同。
传统方案中,功能权限管理,目前已有较成熟的框架,如shiro、spring security等,而数据权限管理,数据权限管理与对应的业务逻辑耦合性较强,常取决于功能权限管理,难以从业务逻辑中剥离出来,导致数据权限的控制使用场景较为局限,适用性不强。
发明内容
本发明实施例提供一种数据查询处理方法、装置、计算机设备及存储介质,以解决传统的数据权限控制方案中,难以从业务逻辑中剥离出来,导致数据权限的控制使用场景较为局限,适用性不强的技术问题。
第一方面,提供了一种数据查询处理方法,包括:
当用户登录之后,根据所述用户的标识信息,获取所述用户有权访问机构的机构代码;
通过预先配置的拦截器实时对所述用户的数据库查询操作进行拦截,以获取所述数据库查询操作的初始查询参数;
根据所述机构代码和所述初始查询参数获取目标查询参数,所述目标查询参数包括授权查询属性,所述授权查询属性用于授权查询所述机构代码对应的数据;
执行包含所述目标查询参数的所述数据库查询操作,以对所述机构代码对应的数据进行查询。
在一种可能的设计中,所述根据所述机构代码和所述初始查询参数获取目标查询参数,包括如下步骤:
判断所述初始查询参数的入参类型;
若所述初始查询参数的入参类型为复杂类型,则根据所述复杂类型、所述机构代码和所述初始查询参数获取所述目标查询参数;
若所述初始查询参数的入参类型为基本类型,则将所述初始查询参数的入参类型转换为复杂类型,并根据转换后得到的所述复杂类型、机构代码和所述初始查询参数获取所述目标查询参数。
在一种可能的设计中,所述根据所述复杂类型、所述机构代码和所述初始查询参数获取所述目标查询参数,包括如下步骤:
若所述复杂类型为哈希映射HashMap,则为所述初始查询参数新增目标键值对,以得到所述目标查询参数,其中,所述目标键值对的键为所述授权查询属性,所述目标键值对的值为所述机构代码;
若所述复杂类型为javaBean类型,则为所述初始查询参数动态新增目标属性,以得到所述目标查询参数,其中,所述目标属性的属性名为所述授权查询属性,所述目标属性对应的值为所述机构代码。
在一种可能的设计中,所述为所述初始查询参数动态新增目标属性,以得到所述目标查询参数,包括如下步骤:
使用动态字节码技术获取所述初始查询参数对应的字节码,并对所述字节码进行修改以增加所述目标属性,并使用所述动态字节码技术创建新的java对象;
使用反射技术,将所述初始查询参数对应的原属性值和所述目标属性的值赋值给所述新的java对象,以得到所述目标查询参数。
在一种可能的设计中,所述将所述初始查询参数的入参类型转换为复杂类型,包括如下步骤
将所述初始查询参数的入参类型,转换为包含所述基本类型的哈希映射HashMap或javaBean类型。
在一种可能的设计中,所述根据所述用户的标识信息,获取所述用户有权访问机构的机构代码,包括如下步骤:
根据所述用户的标识信息,从而预设用户角色表中,查询所述用户对应的角色;
根据所述角色,从预设机构角色表中,查询所述角色有权访问的目标机构;
若所述角色存在多个,则从所述角色有权访问的目标机构中确定出并集机构作为所述用户有权访问机构;
若所述角色仅为一个,则将所述角色有权访问的目标机构作为所述用户有权访问机构;
通过所述用户有权访问机构的机构名称,从预设机构信息表中查询出所述用户有权访问机构的机构代码。
在一种可能的设计中,所述根据所述用户的标识信息,获取所述用户有权访问机构的机构代码之后,所述方法还包括如下步骤:
将所述用户的标识信息和所述机构代码关联存放在内存中。
第二方面,提供了一种数据查询处理装置,包括:
第一获取模块,用于当用户登录之后,根据所述用户的标识信息,获取所述用户有权访问机构的机构代码;
拦截模块,用于通过预先配置的拦截器实时对所述用户的数据库查询操作进行拦截,以获取所述数据库查询操作的初始查询参数;
第二获取模块,用于根据所述机构代码和所述初始查询参数获取目标查询参数,所述目标查询参数包括授权查询属性,所述授权查询属性用于授权查询所述机构代码对应的数据;
执行模块,用于执行包含所述目标查询参数的所述数据库查询操作,以对所述机构代码对应的数据进行查询。
一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述第一方面所提的数据查询处理方法的步骤。
一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述数据查询处理方法的步骤。
上述数据查询处理方法、装置、计算机设备及存储介质所实现的方案中,当用户登录之后,根据用户的标识信息,获取用户有权访问机构的机构代码;通过预先配置的拦截器实时对用户的数据库查询操作进行拦截,以获取数据库查询操作的初始查询参数;根据机构代码和初始查询参数获取目标查询参数,目标查询参数包括授权查询属性,授权查询属性用于授权查询机构代码对应的数据,从而对数据库查询请求进的入参进行了修改,随后才放行该数据库查询操作,以执行包含目标查询参数的数据库查询操作,从而对该机构代码对应的数据进行查询。从本发明可以看出,本发明把数据权限管理代码剥离出来,利用拦截器中拦截并查询用户有权访问机构的机构代码,无需在业务逻辑中关注数据权限,不影响原有业务逻辑,代码侵入性弱,代码简洁,具有较强的适用性,实用性较高。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例中数据查询处理方法的一流程示意图;
图2是本发明一实施例中获取机构标识的一流程示意图;
图3是图1中步骤S30的一具体实施方式示意图;
图4是本发明一实施例中数据查询处理装置的一结构示意图;
图5是本发明一实施例中计算机设备的一结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供了一种数据查询处理方法,可应用在包括客户端和数据查询处理装置的数据查询系统中,其中,客户端通过网络与数据查询处理装置进行通信,用户用于通过客户端进行登录,在登录之后,便可查看其具有访问权限的数据,数据查询处理装置用于根据所述用户的标识信息,获取所述用户有权访问机构的机构代码;通过预先配置的拦截器实时对所述用户的数据库查询操作进行拦截,以获取所述数据库查询操作的初始查询参数;根据所述机构代码和所述初始查询参数获取目标查询参数,所述目标查询参数包括授权查询属性,所述授权查询属性用于授权查询所述机构代码对应的数据;执行包含所述目标查询参数的所述数据库查询操作,以对所述机构代码对应的数据进行查询,并将数据查询结果返回给客户端,以使用户可以通过客户端看到有权访问机构的数据。
其中,客户端可以但不限于各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。数据查询处理装置可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一实施例中,如图1所示,提供一种数据查询处理方法,以该方法应用在上述数据查询处理装置为例进行说明,包括如下步骤:
S10:当用户登录之后,根据用户的标识信息,获取用户有权访问机构的机构代码。
在用户需对数据库的数据进行查询时,需先登录系统,本发明实施例所指的系统指的是各种各样用于查询数据的系统,适用于各种各样的数据查询场景,本发明实施例不做限定。例如,示例性的,该系统可以指的是某个公司包括不同的机构的业务系统,该机构可以是公司、部门、组织等,由于公司内通常需要对数据的查询等权限进行控制,因此需要控制用户只能看到部分机构的数据,比如,用户1可以看到机构1、机构2的数据,用户2可以看到机构3的数据。需要说明的是,本发明实施例所指的系统,还可以指的是其他组织的业务系统,该业务系统依据需求,也有可能具有对应的不同机构,不同的机构数据对于用户的权限不同,本发明不做限制,也不对应用场景一一举例说明。
本发明实施例中,为了便于统一管理各机构的数据,每个机构具有对应的机构代码,在用户登录系统之后,需要先根据用户的标识信息,获取用户有权访问机构的机构代码。
在一实施例中,如图2所示,步骤S10中,也即根据用户的标识信息,获取用户有权访问机构的机构代码,具体包括如下步骤:
S11:根据用户的标识信息,从而预设用户角色表中,查询用户对应的角色。
S12:根据角色,从预设机构角色表中,查询角色有权访问的目标机构。
本发明实施例中,会预先创建多个表,包括预设机构信息表、预设角色表、预设用户角色表、预设机构角色表,其中:
预设机构信息表,用于定义机构的基本信息,例如,该基本信息包括机构名称、机构代码等、以及机构名称和机构代码的对应关系,例如机构名称为机构1、机构2、...、机构N,各机构对应的机构代码为ORG001、ORG002、...、ORG00N。
预设角色表,用于定义角色信息,例如,可角色可以包括角色1、角色2、...、角色M。
预设用户角色表,用于定义用户与角色的关系。需要说明的,依据应用场景的不同,和/或用户的不同,不同的用户对应的角色类型或者角色数量均可能不定。例如对于公司而言,某个职员可能身兼数职位,该职员对应的角色就具有多个,类似也有多不同,该预设用户角色表用于定义上述用户与角色之间的关系。
预设机构角色表,用于定义机构与角色的关系,也即角色有权访问的哪些机构,无权访问的机构,例如,角色1可以访问机构1,角色2可以访问机构1-4等,角色3不可以访问机构2等,上述访问权限关系在预设机构角色表中均预先定义。
对于步骤S11-S12,在用户登录系统之后,可以根据登录信息找出该用户的标识信息,其中,该标识信息是指用于唯一标识该用户的信息,例如,该标识信息可以是该用户的员工号、证件号等,在找到用户的标识信息之后,根据用户的标识信息,先从而预设用户角色表中,查询用户对应的角色,并根据角色,从预设机构角色表中,查询角色有权访问的目标机构。
可以理解,如前述描述,某个用户可能对应多个角色,如某个职员可以对应多个角色,因此,在确定用户对应的角色之后,需判定该用户对应的角色数量,若用户对应的角色数量存在多个或者为一个的情况。无论是何种情况,均需确定出角色对应的有权访问的目标机构。
S13:若角色存在多个,则从角色有权访问的目标机构中确定出并集机构作为用户有权访问机构。
对于该步骤S13,若用户对应的角色存在多个,例如该用户对应有角色1、角色2,假设角色1可以访问机构1,角色2可以访问机构1-4等,则此时用户对应的角色1和角色2,所分别对应的有权访问的目标机构为机构1和机构1-4,因此,从角色有权访问的目标机构中确定出并集机构,也即机构1-4,并将机构1-4作为用户有权访问机构。
需要说明的是,这里仅是以用户对应的角色数量为2,且角色为角色1和角色2为例进行示例性说明,并不对本发明实施例造成限定。
S14:若角色仅为一个,则将角色有权访问的机构作为用户有权访问机构。
对于该步骤,对于该步骤S14,若用户对应的角色仅为一个,例如该用户对应有角色1假设角色1可以访问机构1,则此时用户对应的角色1,所对应的有权访问的目标机构为机构1,因此,将机构1作为用户有权访问机构。
S15:通过用户有权访问机构的机构名称,从预设机构信息表中查询出用户有权访问机构的机构代码。
经过步骤S11-S14之后,便找到了用户有权访问机构之后,便可通过用户有权访问机构的机构名称,从预设机构信息表中查询出用户有权访问机构的机构代码。例如,以上述角色仅为一个为例,当机构1为用户有权访问机构时,则可以从预设机构信息表中查询出该机构1对应的机构代码为ORG001。
本实施方式中,提供了获取用户有权访问机构的方式,具体地,通过预先创建多个表格去保存用户与机构的对应关系,从而维护用户的权限关系,提高方案的可实施性。
S20:通过预先配置的拦截器实时对用户的数据库查询操作进行拦截,以获取数据库查询操作的初始查询参数。
本发明实施例中,会预先定义一个拦截器,该拦截器用于拦截数据库查询操作,也即select类型的db操作。在具体的应用场景中,该拦截器可以采用对象-关系映射(Object/Relation Mapping,ORM)框架的拦截器。需要说明的是,ORM是随着面向对象的软件开发方法发展而产生的,面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射,select类型的db操作通常都是基于面向对象的语言实现,因此,本发明实施例可以拦截器指ORM框架提供的拦截器,另外需要说明的是,该拦截器还可以采用其他框架的拦截器,具体本发明不做限定。
也就是说,本发明实施例所指的拦截器,用于在执行具体数据库操作(db操作)前后,进行功能增强,即执行额外的操作的拦截器。需要说明的是,db操作中,除了select类型的db操作,db操作还可以有select、update、insert、delete等,分别对应查询、更新、插入、删除,本提案中拦截的是数据库查询操作。
可以理解,数据库查询操作目的在于查询数据库中的某些数据,因此,所拦截的数据库查询操作通常是包括入参的,本发明实施例中,为了便于描述,将拦截到的数据库查询操作对应的入参称为初始查询参数。
S30:根据机构代码和初始查询参数获取目标查询参数,目标查询参数包括授权查询属性,授权查询属性用于授权查询机构代码对应的数据。
通过预先配置的拦截器实时对用户的数据库查询操作进行拦截,以获取数据库查询操作的初始查询参数之后,为了对数据权限进行控制,本发明实施例,通过一种无须改动原有业务逻辑,且简便的方式,采用改变数据库查询操作的初始查询参数,具体地,根据机构代码和初始查询参数获取目标查询参数,该目标查询参数包括授权查询属性,授权查询属性用于授权查询机构代码对应的数据。
具体地,如图3所示,步骤S30中,也即根据机构代码和初始查询参数获取目标查询参数,具体包括如下步骤:
S31:判断初始查询参数的入参类型。
通过预先配置的拦截器实时对用户的数据库查询操作进行拦截,以获取数据库查询操作的初始查询参数之后,需先判定该初始查询参数的入参类型。
可以理解,数据库查询等操作是基于java语言所实现,初始查询参数是一种java对象,java对象包括复杂类型和基本类型,其中,基本类型指的Java语言提供的八种基本类型,包括六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型,除基本类型外的对象都是复杂类型。本发明实施例中,需判断初始查询参数的入参类型是复杂类型还是基本类型,如果是复杂类型,依据初始查询参数的入参类型的不同,采用不同的参数处理策略。
S32:若初始查询参数的入参类型为复杂类型,则根据复杂类型、机构代码和初始查询参数获取目标查询参数,其中,在一应用场景中,本发明实施例的复杂类型包括HashMap和javaBean两种情况讨论。
若所述复杂类型为哈希映射HashMap,则为所述初始查询参数新增目标键值对,以得到所述目标查询参数,其中,所述目标键值对的键为所述授权查询属性,所述目标键值对的值为所述机构代码。
也就是说,如果是HashMap,新增一个键值对key value,目标键值对的键key为授权查询属性(permittedOrg),需要说明的是,permittedOrg在此仅为示例性说明,仅是代表了本发明实施例所定义的授权查询属性,具体还可以用其他的字符串表征,具体不做限定,所述目标键值对的值value为当前登录用户有权访问机构的机构代码。
若所述复杂类型为javaBean类型,则为所述初始查询参数动态新增目标属性,以得到所述目标查询参数,其中,所述目标属性的属性名为授权查询属性,所述目标属性对应的值为所述机构代码。也就是说,如果是javaBean,则对javaBean动态增加一个目标属性,该目标属性的属性名为授权查询属性(permittedOrg),该目标属性的属性值value为当前登录用户有权访问机构的机构代码。
其中,值得说明的是,HashMap是key-value形式的数据结构,而javaBean是符合一定标准的java类,key和value可以简单理解为“名”与“值”,比如名为“姓名”时,值为“小明”,名为“年龄”时,值为“18”,HashMap是专门用于存储key-value的数据结构,原生支持动态的增删key-value,比如动态的增加key为授权查询属性(permittedOrg),value为若干用户有权访问机构的机构代码。
另外,javaBean存储的不是key-value的形式,而是固定的属性,比如一个学生的javaBean可以有name(姓名)、age(年龄)、class(班级)等属性,javaBean的属性不原生支持动态增删,因此需要使用动态字节码技术初始查询参数进行动态增加属性,从而获得上述目标属性,以得到目标查询参数。
需要说明的是,在实现本发明实施例之前,可以构建转换组件,该转换组件使用动态字节码技术,用于向java对象动态增加属性,具体操作为:
1.使用动态字节码技术获取java对象的字节码,修改该字节码,新增属性;
2.用新的字节码创建新的java对象;
3.使用反射技术,把原java对象的属性值赋值给新的java对象;
4.使用反射技术,把此次新增的属性值赋值给新的java对象;
5.返回新的java对象;
需要说明的是,常见的动态字节码技术有asm、javassist、cglib等,具体不做限定。通过上述转换组件的功能可以看出,本转换组件实际上不是直接对原java对象增加属性,而是创建新的java对象,把旧属性和新属性的值赋值到新的java对象,并返回新的java对象。
字节码(Byte-code)是一种包含执行程序、由一序列op代码/数据对组成的二进制文件。字节码是一种中间码,它比机器码更抽象。它经常被看作是包含一个执行程序的二进制文件,更像一个对象模型。字节码被这样叫是因为通常每个opcode是一字节长,但是指令码的长度是变化的。每个指令有从0到255(或十六进制的:00到FF)的一字节操作码,被参数例如寄存器或内存地址跟随。
反射技术指的是,Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。
在本发明实施例中,可以使用上述转换组件,实现为所述初始查询参数动态新增目标属性,以得到所述目标查询参数,具体包括如下步骤:
S101:使用动态字节码技术获取所述初始查询参数对应的字节码,并对所述字节码进行修改以增加所述目标属性,并使用所述动态字节码技术创建新的java对象。
从上述转换组件的功能描述可以看出,在对初始查询参数(也即java对象)动态新增目标属性时,可以使用动态字节码技术,获取初始查询参数对应的字节码,并对字节码进行修改以增加所述目标属性,并使用动态字节码技术创建新的java对象。
S102:使用反射技术,将所述初始查询参数对应的原属性值和所述目标属性的值赋值给所述新的java对象,以得到所述目标查询参数。
在创建新的java对象之后,该转换组件便可利用反射技术将所述初始查询参数对应的原属性值和所述目标属性的值赋值给所述新的java对象,以得到所述目标查询参数。
S33:若初始查询参数的入参类型为基本类型,则将初始查询参数的入参类型转换为复杂类型,并根据转换后得到的复杂类型、机构代码和初始查询参数获取目标查询参数。
需要说明的是,上述步骤S32中,主要是针对初始查询参数的入参类型为复杂类型时的处理进行了描述。但是,在实际应用中,初始查询参数的入参类型还可能是基本类型,为了全面实现对数据权限的控制,本发明实施例提供了更为全面的技术方案。具体地,若初始查询参数的入参类型为基本类型,则将初始查询参数的入参类型转换为复杂类型,并根据转换后得到的复杂类型、机构代码和初始查询参数获取目标查询参数。可见,如果是初始查询参数的入参类型是基本类型,本发明实施例需要额外进行特殊处理,具体使用动态字节码技术,把初始查询参数修改为包含该基本类型的复杂类型,然后,便可按上述对复杂类型的处理方式进行处理,也即,按照上述对javaBean或HashMap类型的处理方式,来进行后续的动态增加授权查询属性处理,具体可以再对应参阅前述步骤S30,这里不重复描述。举个简单的例子,比如初始查询参数为基本类型age=18,则可以把该初始查询参数改成包含age属性的javaBean。
需要说明的是,在上述实施例中,需要预先获取用户有权访问机构的机构代码,然而,用户的查询可能不是仅有一次,如果每次都通过查表的方式来获取机构代码,效率将非常低下,且增加处理功耗,对此,在一些实施例中,根据所述用户的标识信息,获取所述用户有权访问机构的机构代码之后,还需将所述用户的标识信息和所述机构代码关联存放在内存中。
可以看出,用户成功登录系统后,通过关联查询步骤一中的若干表,查询出用户有权访问机构的机构代码,存放于内存中,存到内存的好处是一次查询,多次使用,以后需要查询出用户有权访问机构的机构代码,从内存中读取即可,不用每次都关联查询步骤一中的若干表,也即后续便可直接从内存中读取该用户有权访问机构的机构代码,效率较高,功耗较低。其中,具体存放形式可以是session、redis等。
其中,session是http协议无状态问题的常见解决方案之一,用户登录成功之后,把用户信息保存到session(默认储存在服务端的内存),对于浏览器发起的HTTP请求,可以根据session中是否存在用户信息判断用户是否登录,也方便业务逻辑中获取当前会话用户信息,本发明实施例可以将上述机构代码和用户标识关联存储在session中。
其中,redis是一个高性能的key-value数据库,它支持存储的value类型包括string(字符串)、list(链表)、set(集合)、zset(sorted set--有序集合)和hash(哈希类型)等。这些数据类型都支持push/pop、add/remove及取并集和差集及更丰富的操作,而且这些操作都是原子性的。为了保证效率,数据都是缓存在内存中。
在一些实施例中,对于用户量较小且非分布式的数据权限控制应用场景,可以使用session,优点是简单快捷;对于用户量较大或者分布式数据权限控制应用场景,最好使用redis等缓存中间件。
S40:执行包含目标查询参数的数据库查询操作,以对机构代码对应的数据进行查询。
可以看出,在经过前述步骤S10-S30之后,便对拦截到的数据库查询操作的初始查询参数进行了修改,修改后,便可放行该数据库查询操作,使得执行包含目标查询参数的数据库查询操作,以对机构代码对应的数据进行查询。具体地,修改入参后,继续执行该数据库查询操作,在数据库查询操作中的入参中的授权查询属性(permittedOrg),用于控制机构查询权限,通过入参限定的方式使得此次查询仅查询授权查询属性(permittedOrg)的数据,从而查询到用户有权访问机构的数据。
比如,某用户有机构1和机构2的权限,机构1、2的机构代码分别为ORG001、ORG002,即permittedOrg为[ORG001,ORG002],最后执行的sql中会有where org_code in('ORG001','ORG002')这样的条件,用于控制只查询机构1、机构2的数据,从而获取到机构1、机构2的数据。
可见,本发明实施例提供了一种数据查询处理方法,把数据权限管理代码剥离出来,不影响原有业务逻辑,代码侵入性弱,代码简洁,具体地,把数据权限管理代码剥离出来,利用拦截器来实现权限控制,在拦截器中查询用户有权访问机构的机构代码,并且可以使用动态字节码技术将用户有权访问机构的机构代码注入到拦截到的数据库查询操作的入参中,无需在业务逻辑中去改变数据权限,不影响原有业务逻辑,代码侵入性弱,代码简洁,实用性较高,另外值得注意的是,后续新增其他功能时,不用关注怎么控制用户有权访问机构的机构代码,仅需在db操作中根据入参中的permittedOrg属性控制机构权限,仅查询permittedOrg范围内的数据,不影响原有功能权限的逻辑和代码,有利于维护,且适用性高,实用性更强。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
在一实施例中,提供一种数据查询处理装置,该数据查询处理装置与上述实施例中数据查询处理方法一一对应。如图4所示,该数据查询处理装置包括第一获取模块101、拦截模块102、第二获取模块103和执行模块104。各功能模块详细说明如下:
第一获取模块101,用于当用户登录之后,根据所述用户的标识信息,获取所述用户有权访问机构的机构代码;
拦截模块102,用于通过预先配置的拦截器实时对所述用户的数据库查询操作进行拦截,以获取所述数据库查询操作的初始查询参数;
第二获取模块103,用于根据所述机构代码和所述初始查询参数获取目标查询参数,所述目标查询参数包括授权查询属性,所述授权查询属性用于授权查询所述机构代码对应的数据;
执行模块104,用于执行包含所述目标查询参数的所述数据库查询操作,以对所述机构代码对应的数据进行查询。
在一实施例中,第二获取模块103具体用于:
判断所述初始查询参数的入参类型;
若所述初始查询参数的入参类型为复杂类型,则根据所述复杂类型、所述机构代码和所述初始查询参数获取所述目标查询参数;
若所述初始查询参数的入参类型为基本类型,则将所述初始查询参数的入参类型转换为复杂类型,并根据转换后得到的所述复杂类型、机构代码和所述初始查询参数获取所述目标查询参数。
在一实施例中,第二获取模块103具体用于:
若所述复杂类型为哈希映射HashMap,则为所述初始查询参数新增目标键值对,以得到所述目标查询参数,其中,所述目标键值对的键为所述授权查询属性,所述目标键值对的值为所述机构代码;
若所述复杂类型为javaBean类型,则为所述初始查询参数动态新增目标属性,以得到所述目标查询参数,其中,所述目标属性的属性名为所述授权查询属性,所述目标属性对应的值为所述机构代码。
在一实施例中,第二获取模块103具体用于:
使用动态字节码技术获取所述初始查询参数对应的字节码,并对所述字节码进行修改以增加所述目标属性,并使用所述动态字节码技术创建新的java对象;
使用反射技术,将所述初始查询参数对应的原属性值和所述目标属性的值赋值给所述新的java对象,以得到所述目标查询参数。
在一实施例中,第二获取模块103具体用于:
将所述初始查询参数的入参类型,转换为包含所述基本类型的哈希映射HashMap或javaBean类型。
在一实施例中,第一获取模块101,具体用于:
根据所述用户的标识信息,从而预设用户角色表中,查询所述用户对应的角色;
根据所述角色,从预设机构角色表中,查询所述角色有权访问的目标机构;
若所述角色存在多个,则从所述角色有权访问的目标机构中确定出并集机构作为所述用户有权访问机构;
若所述角色仅为一个,则将所述角色有权访问的目标机构作为所述用户有权访问机构;
通过所述用户有权访问机构的机构名称,从预设机构信息表中查询出所述用户有权访问机构的机构代码。
在一实施例中,数据查询处理装置还包括存储模块,该存储模块用于:述根据所述用户的标识信息,获取所述用户有权访问机构的机构代码之后,将所述用户的标识信息和所述机构代码关联存放在内存中。
可见,本发明实施例提供了一种数据查询处理装置,把数据权限管理代码剥离出来,不影响原有业务逻辑,代码侵入性弱,代码简洁,具体地,把数据权限管理代码剥离出来,利用拦截器来实现权限控制,在拦截器中查询用户有权访问机构的机构代码,并且可以使用动态字节码技术将用户有权访问机构的机构代码注入到拦截到的数据库查询操作的入参中,无需在业务逻辑中去改变数据权限,不影响原有业务逻辑,代码侵入性弱,代码简洁,实用性较高,另外值得注意的是,后续新增其他功能时,不用关注怎么控制用户有权访问机构的机构代码,仅需在db操作中根据入参中的permittedOrg属性控制机构权限,仅查询permittedOrg范围内的数据,不影响原有功能权限的逻辑和代码,有利于维护,且适用性高,实用性更强。
关于数据查询处理装置的具体限定可以参见上文中对于数据查询处理方法的限定,在此不再赘述。上述数据查询处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图5所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据查询处理方法。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
当用户登录之后,根据所述用户的标识信息,获取所述用户有权访问机构的机构代码;
通过预先配置的拦截器实时对所述用户的数据库查询操作进行拦截,以获取所述数据库查询操作的初始查询参数;
根据所述机构代码和所述初始查询参数获取目标查询参数,所述目标查询参数包括授权查询属性,所述授权查询属性用于授权查询所述机构代码对应的数据;
执行包含所述目标查询参数的所述数据库查询操作,以对所述机构代码对应的数据进行查询。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
当用户登录之后,根据所述用户的标识信息,获取所述用户有权访问机构的机构代码;
通过预先配置的拦截器实时对所述用户的数据库查询操作进行拦截,以获取所述数据库查询操作的初始查询参数;
根据所述机构代码和所述初始查询参数获取目标查询参数,所述目标查询参数包括授权查询属性,所述授权查询属性用于授权查询所述机构代码对应的数据;
执行包含所述目标查询参数的所述数据库查询操作,以对所述机构代码对应的数据进行查询。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
Claims (10)
1.一种数据查询处理方法,其特征在于,包括:
当用户登录之后,根据所述用户的标识信息,获取所述用户有权访问机构的机构代码;
通过预先配置的拦截器实时对所述用户的数据库查询操作进行拦截,以获取所述数据库查询操作的初始查询参数;
根据所述机构代码和所述初始查询参数获取目标查询参数,所述目标查询参数包括授权查询属性,所述授权查询属性用于授权查询所述机构代码对应的数据;
执行包含所述目标查询参数的所述数据库查询操作,以对所述机构代码对应的数据进行查询。
2.如权利要求1所述的数据查询处理方法,其特征在于,所述根据所述机构代码和所述初始查询参数获取目标查询参数,包括:
判断所述初始查询参数的入参类型;
若所述初始查询参数的入参类型为复杂类型,则根据所述复杂类型、所述机构代码和所述初始查询参数获取所述目标查询参数;
若所述初始查询参数的入参类型为基本类型,则将所述初始查询参数的入参类型转换为复杂类型,并根据转换后得到的所述复杂类型、机构代码和所述初始查询参数获取所述目标查询参数。
3.如权利要求2所述的数据查询处理方法,其特征在于,所述根据所述复杂类型、所述机构代码和所述初始查询参数获取所述目标查询参数,包括:
若所述复杂类型为哈希映射HashMap,则为所述初始查询参数新增目标键值对,以得到所述目标查询参数,其中,所述目标键值对的键为所述授权查询属性,所述目标键值对的值为所述机构代码;
若所述复杂类型为javaBean类型,则为所述初始查询参数动态新增目标属性,以得到所述目标查询参数,其中,所述目标属性的属性名为所述授权查询属性,所述目标属性对应的值为所述机构代码。
4.如权利要求3所述的数据查询处理方法,其特征在于,所述为所述初始查询参数动态新增目标属性,以得到所述目标查询参数,包括:
使用动态字节码技术获取所述初始查询参数对应的字节码,并对所述字节码进行修改以增加所述目标属性,并使用所述动态字节码技术创建新的java对象;
使用反射技术,将所述初始查询参数对应的原属性值和所述目标属性的值赋值给所述新的java对象,以得到所述目标查询参数。
5.如权利要求2所述的数据查询处理方法,其特征在于,所述将所述初始查询参数的入参类型转换为复杂类型,包括:
将所述初始查询参数的入参类型,转换为包含所述基本类型的HashMap或javaBean类型。
6.如权利要求1-5任一项所述的数据查询处理方法,其特征在于,所述根据所述用户的标识信息,获取所述用户有权访问机构的机构代码,包括:
根据所述用户的标识信息,从而预设用户角色表中,查询所述用户对应的角色;
根据所述角色,从预设机构角色表中,查询所述角色有权访问的目标机构;
若所述角色存在多个,则从所述角色有权访问的目标机构中确定出并集机构作为所述用户有权访问机构;
若所述角色仅为一个,则将所述角色有权访问的目标机构作为所述用户有权访问机构;
通过所述用户有权访问机构的机构名称,从预设机构信息表中查询出所述用户有权访问机构的机构代码。
7.如权利要求1-5任一项所述的数据查询处理方法,其特征在于,所述根据所述用户的标识信息,获取所述用户有权访问机构的机构代码之后,所述方法还包括:
将所述用户的标识信息和所述机构代码关联存放在内存中。
8.一种数据查询处理装置,其特征在于,包括:
第一获取模块,用于当用户登录之后,根据所述用户的标识信息,获取所述用户有权访问机构的机构代码;
拦截模块,用于通过预先配置的拦截器实时对所述用户的数据库查询操作进行拦截,以获取所述数据库查询操作的初始查询参数;
第二获取模块,用于根据所述机构代码和所述初始查询参数获取目标查询参数,所述目标查询参数包括授权查询属性,所述授权查询属性用于授权查询所述机构代码对应的数据;
执行模块,用于执行包含所述目标查询参数的所述数据库查询操作,以对所述机构代码对应的数据进行查询。
9.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述数据查询处理方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述数据查询处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011606830.0A CN112685451B (zh) | 2020-12-28 | 2020-12-28 | 数据查询处理方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011606830.0A CN112685451B (zh) | 2020-12-28 | 2020-12-28 | 数据查询处理方法、装置、计算机设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112685451A true CN112685451A (zh) | 2021-04-20 |
CN112685451B CN112685451B (zh) | 2024-02-13 |
Family
ID=75454803
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011606830.0A Active CN112685451B (zh) | 2020-12-28 | 2020-12-28 | 数据查询处理方法、装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112685451B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114637761A (zh) * | 2022-03-10 | 2022-06-17 | 马上消费金融股份有限公司 | 业务对象生成方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070266426A1 (en) * | 2006-05-12 | 2007-11-15 | International Business Machines Corporation | Method and system for protecting against denial of service attacks using trust, quality of service, personalization, and hide port messages |
CN110609737A (zh) * | 2019-08-14 | 2019-12-24 | 平安科技(深圳)有限公司 | 关联数据查询方法、装置、计算机设备和存储介质 |
CN111506611A (zh) * | 2020-04-21 | 2020-08-07 | 北京同邦卓益科技有限公司 | 数据的查询方法、装置、设备及存储介质 |
CN111737322A (zh) * | 2020-07-31 | 2020-10-02 | 支付宝(杭州)信息技术有限公司 | 一种数据共享方法、装置及设备 |
-
2020
- 2020-12-28 CN CN202011606830.0A patent/CN112685451B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070266426A1 (en) * | 2006-05-12 | 2007-11-15 | International Business Machines Corporation | Method and system for protecting against denial of service attacks using trust, quality of service, personalization, and hide port messages |
CN110609737A (zh) * | 2019-08-14 | 2019-12-24 | 平安科技(深圳)有限公司 | 关联数据查询方法、装置、计算机设备和存储介质 |
CN111506611A (zh) * | 2020-04-21 | 2020-08-07 | 北京同邦卓益科技有限公司 | 数据的查询方法、装置、设备及存储介质 |
CN111737322A (zh) * | 2020-07-31 | 2020-10-02 | 支付宝(杭州)信息技术有限公司 | 一种数据共享方法、装置及设备 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114637761A (zh) * | 2022-03-10 | 2022-06-17 | 马上消费金融股份有限公司 | 业务对象生成方法及装置 |
CN114637761B (zh) * | 2022-03-10 | 2024-03-19 | 马上消费金融股份有限公司 | 业务对象生成方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112685451B (zh) | 2024-02-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11405183B2 (en) | Using cache objects to store events for adding corresponding objects in a blockchain | |
WO2019114766A1 (zh) | 一种数据脱敏方法、服务器、终端及计算机可读存储介质 | |
US20200301917A1 (en) | Data protection method and device and storage medium | |
US11601414B2 (en) | Contact consolidation across multiple services | |
US9445271B2 (en) | Multi-user use of single-user apps | |
US10063649B2 (en) | Data translation using a proxy service | |
CN110377325B (zh) | 接口配置方法、接口调用方法、装置、设备及存储介质 | |
CN103067463B (zh) | 用户root权限集中管理系统和管理方法 | |
CN110188573B (zh) | 分区授权方法、装置、设备及计算机可读存储介质 | |
CN110290112B (zh) | 权限控制方法、装置、计算机设备及存储介质 | |
CN110765484B (zh) | 一种征信数据处理方法及电子设备 | |
CN111414381B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
US20140173720A1 (en) | System and method for controlling the on and off state of features at runtime | |
US10650153B2 (en) | Electronic document access validation | |
CN114065296A (zh) | 基于拦截器的权限控制方法、装置、计算机设备及介质 | |
CN111385264A (zh) | 一种通信业务数据访问系统和方法 | |
CN112527504A (zh) | 多租户的资源配额管理方法、装置、计算机设备 | |
CN111506611A (zh) | 数据的查询方法、装置、设备及存储介质 | |
CN114218538A (zh) | 权限控制方法、装置、计算机设备、存储介质 | |
US10733316B2 (en) | Pluggable database lockdown profile | |
Gupta et al. | Enabling attribute-based access control in NoSQL databases | |
CN112685451A (zh) | 数据查询处理方法、装置、计算机设备及存储介质 | |
CN114860770A (zh) | 基于数据服务的优化方法、系统、计算机设备及介质 | |
US20230353572A1 (en) | Managing access requests for policy-based access control systems in computer networks | |
CN116319027A (zh) | 鉴权请求的生成方法、装置、电子设备及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |