CN114065296A - 基于拦截器的权限控制方法、装置、计算机设备及介质 - Google Patents
基于拦截器的权限控制方法、装置、计算机设备及介质 Download PDFInfo
- Publication number
- CN114065296A CN114065296A CN202111547538.0A CN202111547538A CN114065296A CN 114065296 A CN114065296 A CN 114065296A CN 202111547538 A CN202111547538 A CN 202111547538A CN 114065296 A CN114065296 A CN 114065296A
- Authority
- CN
- China
- Prior art keywords
- authority
- data
- query
- sql request
- configuration
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6227—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database where protection concerns the structure of data, e.g. records, types, queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
- G06F16/2445—Data retrieval commands; View definitions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Storage Device Security (AREA)
Abstract
本申请涉及数据库、区块链技术领域,公开了一种基于拦截器的权限控制方法、装置、计算机设备及介质,解决传统方案用户权限SQL逻辑和业务SQL逻辑耦合在一起,需做更复杂的代码配置的技术问题。方法部分包括:通过拦截器拦截前端的原始SQL请求,原始SQL请求包含数据查询范围;响应原始SQL请求,获取当前登陆用户对应的数据权限对象;解析数据权限对象,以获取用户的权限因子,权限因子包括用户拥有的业务表权限和表字段权限;将业务表权限和原始SQL请求的查询范围进行对比判断;当查询请求的查询范围在业务表权限内,按照表字段权限更改原始SQL请求的SQL查询逻辑段,得到目标SQL请求;将目标SQL请求放行至数据库中,以使数据库响应目标SQL请求执行数据查询。
Description
技术领域
本申请涉及数据库、区块链技术领域,尤其涉及一种基于拦截器的权限控制方法、装置、计算机设备及存储介质。
背景技术
业务权限有别于功能权限,又称数据权限。在企业现实组织或人员结构下,不同职权的人对于系统的业务权限是不同的。比如理赔经理可以看到理赔业务系统中所有的赔案,但理赔专员只能看到部分或者是他自己名下的赔案。业务权限甚至可以细粒度控制到表中的字段,比如赔案记录中的一些敏感字段,如赔案金额等,对于不同职权的人来说,能否看到该字段的权限可以是不一样的。
发明人研究发现,假如要实现一个支持业务权限控制的复杂的查询,传统的方案中,是在复杂的查询SQL上追加基于本系统用户权限体系的权限SQL段,结合起来查询出该用户所拥有的权限数据,也就是说,传统业务权限实现方式大多是对业务系统有所侵入,这样一来用户权限SQL逻辑就和业务SQL逻辑耦合在一起,需要写更多的SQL逻辑或做更复杂的代码配置一实现权限控制,比较繁琐。
发明内容
本申请实施例提供一种基于拦截器的权限控制方法、装置、计算机设备及存储介质,以解决传统方案的权限控制方案与业务逻辑强相关,且开发工作两比较繁琐的技术问题。
一种基于拦截器的权限控制方法,包括:
通过拦截器拦截前端的原始SQL请求,所述原始SQL请求包含数据查询范围;
响应所述原始SQL请求,获取当前登陆用户对应的数据权限对象;
解析所述数据权限对象,以获取所述用户的权限因子,所述权限因子包括所述用户拥有的业务表权限和表字段权限;
将所述业务表权限和所述原始SQL请求的查询范围进行对比判断;
当所述查询请求的查询范围在所述业务表权限内,按照所述表字段权限更改所述原始SQL请求的SQL查询逻辑段,得到目标SQL请求;
将所述目标SQL请求放行至数据库中,以使所述数据库响应所述目标SQL请求执行数据查询。
一种基于拦截器的权限控制装置,包括:
拦截模块,用于通过拦截器拦截前端的原始SQL请求,所述原始SQL请求包含数据查询范围;
获取模块,用于响应所述原始SQL请求,获取当前登陆用户对应的数据权限对象;
解析模块,用于解析所述数据权限对象,以获取所述用户的权限因子,所述权限因子包括所述用户拥有的业务表权限和表字段权限;
判断模块,用于将所述业务表权限和所述原始SQL请求的查询范围进行对比判断;
更改模块,用于当所述查询请求的查询范围在所述业务表权限内,按照所述表字段权限更改所述原始SQL请求的SQL查询逻辑段,得到目标SQL请求;
发送模块,用于将所述目标SQL请求放行至数据库中,以使所述数据库响应所述目标SQL请求执行数据查询。
一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述基于拦截器的权限控制方法的步骤。
一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述方法的步骤。
上述基于拦截器的权限控制方法、装置、计算机设备及存储介质所提供的其中一个方案中,能够在业务逻辑代码和原始SQL无侵入的情况下实现业务权限的管控,权限控制交由权限控制装置去做的,实现业务逻辑代码和权限代码的实现完全的解耦,会获取所述用户的权限因子,所述权限因子包括所述用户拥有的业务表权限和表字段权限,按照所述表字段权限更改所述原始SQL请求的SQL查询逻辑段,能够实现更细的权限管控粒度,使得开发人员不需要为如何给原本就复杂的业务查询SQL,去添加业务权限控制而烦恼,降低了配置复杂代码的工作量,降低了繁琐配置,也不需要为权限如何粒度更细绞尽脑汁,只需关注业务逻辑即可,具有极高的应用场景。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一实施例中基于拦截器的权限控制方法的一应用环境示意图;
图2是本申请一实施例中基于拦截器的权限控制方法的一流程示意图;
图3是本申请一实施例中基于拦截器的权限控制方法的另一流程示意图;
图4是本申请一实施例中基于拦截器的权限控制方法的另一流程示意图;
图5是本申请一实施例中基于拦截器的权限控制装置的一结构示意图;
图6是本申请一实施例中计算机设备的一结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例提供基于拦截器的权限控制方法,可应用在如图1的应用环境中,其中,前端可以通过网络与权限控制装置进行通信,权限控制装置与后端的数据库通信,权限控制装置可以通过拦截器拦截前端的原始SQL请求,所述原始SQL请求包含数据查询范围;响应所述原始SQL请求,获取当前登陆用户对应的数据权限对象;解析所述数据权限对象,以获取所述用户的权限因子,所述权限因子包括所述用户拥有的业务表权限和表字段权限;将所述业务表权限和所述原始SQL请求的查询范围进行对比判断;当所述查询请求的查询范围在所述业务表权限内,按照所述表字段权限更改所述原始SQL请求的SQL查询逻辑段,得到目标SQL请求;将所述目标SQL请求放行至数据库中,以使所述数据库响应所述目标SQL请求执行数据查询,从而将该目标SQL请求对应的数据查询结果反馈回前端,完成数据查询操作。
其中,前端可以包括但不限于各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。具体不做限定。另外需要值得说明的是,该权限控制装置可以是运行在前端内的组件或者运行于前端外独立的装置,具体均不做限定。
在一实施例中,如图2所示,提供一种基于拦截器的权限控制方法,以该方法应用在图1中的权限控制装置为例进行说明,包括如下步骤:
S10:通过拦截器拦截前端的原始SQL请求,所述原始SQL请求包含数据查询范围。
用户登录业务系统后,需要通过前端查询某业务系统对应的数据时,可以触发该前端向此业务系统对应的数据库发送结构化查询语言(Structured Query Language,SQL)请求,即SQL请求是一种数据查询请求。该业务系统可以是一些保险公司的理赔系统或者其他应用场景下的业务系统,具体不做限定,也不做一一说明。为便于说明,本申请将前端向业务系统对应的数据库发送的用于查询数据的SQL请求称为原始SQL请求。
其中,在一些实施例中,基于前端的查询需求不同,查询场景和范围也会不同,示例性的,该原始SQL请求的可以是单表查询也可以是多表进行查询,比如联表查询等,也就是说,所述原始SQL请求是包含数据查询范围的,本申请通过解析原始SQL请求的SQL查询逻辑字段便可解析出器数据查询范围。
拦截器是本申请中用于拦截前端向数据库发出的上述原始SQL请求的组件或模块。
在一些实施例中,权限控制装置可通过MyBatis中的拦截器(Interceptor)对原始SQL请求进行拦截。可以理解的是,拦截器(Interceptor)在MyBatis中被当做插件(plugin)对待,这里采用Executor Interceptor拦截查询请求,值得说明的是,这里的原始SQL请求通常指到达Mybatis层的线程,也就是说前端的原始SQL请求线程已经到达了业务系统的DAO层,也可以理解为对象关系映射层(ORM),这里使用的ORM框架是Mybatis。
S20:响应所述原始SQL请求,获取当前登陆用户对应的数据权限对象。
S30:解析所述数据权限对象,以获取所述用户的权限因子,所述权限因子包括所述用户拥有的业务表权限和表字段权限。
当权限控制装置拦截到前端的原始SQL请求后,会响应该原始SQL请求,获取当前登录用户对应的数据权限。例如,若当前登录用户为用户A,是用户A触发通过前端了上述原始SQL请求,则会响应该原始SQL请求,去获取用户A对应的数据权限对象。也就是说,对于不同的业务系统的登录用户,具有对应的数据权限对象,该数据权限对象是保存在缓存中的一种存储对象。
以用户A为例,在得到数据权限对象之后,会解析该数据权限对象,以获取所述用户A的权限因子,所述权限因子包括所述用户A拥有的业务表权限和表字段权限。其中,业务表权限指示了用户A能够拥有的哪些业务表的权限,表字段权限指示了用户A对具有权限的业务表中的表字段所拥有的权限。
在一些实施例中,上述表字段权限包括但不局限于:所述表字段范围权限,以及对所述表字段范围权限内的表字段的配置权限。其中,进一步地,作为一个示例实施例,该表字段的配置权限可以包括该表字段的操作规则配置权限、表字段允许的表达式值或范围值配置权限、字段连接类型配置权限和字段位置类型配置权限,还可以包括配置字段别名等,具体不做限定。
其中,表字段范围权限指示了用户能去操作的某张表的字段范围,例如,该字段范围可以是全部字段或某部分字段;表字段的操作规则配置权限,指示了用户对拥有权限的表字段的操作规则,例如操作规则可以是=、<>、>、like、between、in;表字段允许的表达式值或范围值配置权限,指示了用户对拥有权限的表字段的表达式值或范围值的配置权限,例如,以范围值为例,范围值可以是auto,2020-1101and 2021-1101等;字段连接类型配置权限,指示了用户对拥有权限的表字段的字段连接类型权限,例如and、or等;字段位置类型配置权限,指示了用户对拥有权限的字段位置类型权限,例如,字段位置类型是放在select后面的展示列字段,还是作为Where后面的查询条件等。
需要说明的是,上述例子仅为示例说明,实际应用中,还可以有其他情况,这里不一一举例说明。
其中,在一些实施例中,提供了一种配置每个用户对应的数据权限对象的方式,如图3所示,步骤S20之前,也即响应所述原始SQL请求,获取当前登陆用户对应的数据权限对象之前,所述方法还包括如下步骤:
S101:获取数据权限配置表;
需要说明的是,上述数据权限对象是本申请实施的基础,在得到数据权限对象时,需先获取数据权限配置表,该数据权限配置表可以说是基础配置。所述数据权限配置表包括两个部分的内容,第一部分是基础数据配置部分,第二部分是权限数据配置部分,在一些实施例中,这两部分内容可以作为子表存储于数据权限配置表中。
关于基础数据配置子表,所述基础数据配置子表部分包含业务系统的数据源的所有表信息。在一些实施方式中,在业务系统第一次启动时,可以读取该业务系统的数据源,从而把数据源中的所有业务表(表名、表注释、表别名、表所属数据库等)、表字段(字段名、字段类型、字段参数范围等)等作为元数据提取并存储起来到这部分基础配置子表中。
关于权限数据配置子表,所述权限数据配置子表部分包括各用户的权限配置信息,能够配置系统用户的权限因子。例如,能够拥有哪些表的权限,拥有表中哪些字段的权限,如配置系统用户能去操作某张表的字段范围(全部字段或部分字段);确定了字段范围,就可以进一步配置字段,如配置字段别名、配置可操作字段的操作规则(操作规则如=、<>、>、like、between、in等)。有了规则就可以进一步配置这些字段可允许的表达式值或值范围,配置完了后这些数据将作为在运行时作为操作权限的数据来源。
在一些实施例中,步骤S101中,所述获取数据权限配置表,包括:接收后管服务器发送的所述数据权限配置表;其中,所述后管服务器用于根据所述基础数据配置渲染出后管配置页面,所述后管配置页面包含目标系统用户的目标表树,所述目标表树包含分支表,所述分支表包含所述分支表对应的字段的配置选项;所述后管服务器还用户接收后管人员在所述目标表树上的权限配置操作以获取权限数据,并依据所述基础数据和所述权限数据生成所述数据权限配置表。
值得一提的是,基于本申请涉及权限数据的配置,可以明显看出,如果手动配置权限数据配置子表的权限数据会比较麻烦,因为数据库客户端工作在录入数据方面不是特别友好,因此,在一些实施例中,可以利用后端服务器根据基础数据配置子表的基础数据配置。具体地,先构建一套后管配置页面,其次,后管服务器会把所有业务表对应的元数据生成一个表树,也即上述目标表树,以及一些选表选项和权限选择选项,后管人员可以先通过勾选系统用户(如用户A),后再勾选某个业务表表,然后勾选该业务表中的字段,填写或选择相关权限因子,如表字段的规则、表达式值权限配置,当提交时,针把第二份权限数据配置存储到表中,最后每个在后管配置的系统用户都将拥有一套权限数据。这将大大降低数据权限配置表的配置难度和提升操作的友好度。可以看出,这里的对于权限配置的后管配置可以交由业务人员去配置,而无需专业人员处理,也降低了配置难度。
这样,所述后管服务器可以接收到第二部分的权限数据配置,从而结合第一部分的基础数据配置子表,生成最终的数据权限配置表给权限控制装置使用。
S102:将所述数据权限配置表保存在缓存中。
经过步骤S101,权限控制装置获取到数据权限配置表后,会将所述数据权限配置表保存在缓存中。这样,方便后续用于生成当前登录用户的有关权限控制。
在一些实施例中,那些数据权限配置表也可以保存在区块链网络中。
本申请所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。
S103:通过所述业务系统登陆态的抽象接口,获取所述用户的登陆状态;
S104:当获取到所述用户的登陆态处于已登陆状态时,将所述缓存中的所述数据权限配置表中当前登陆的所述用户的权限配置信息读取出来并封装得到所述数据权限对象;
S105:将所述数据权限对象保存在所述缓存中。
在该实施例中,可以提供获取业务系统的登录态的抽象接口,由引用依赖本权限控制装置的业务系统来实现该接口。如上述理赔系统为例,该理赔系统可以提供这么一个获取理赔系统的登录态的抽象接口,示例性的,如这样的一个接口:public UserVogetSystemuser()。对于权限控制装置而言,其并不知道理赔系统运行时当前登录的系统用户是谁,通过上述抽象接口,本权限控制装置可以获取到理赔系统运行时当前登录的系统用户,登录态也即是指登录状态。
一般来讲,理赔系统等业务系统都是登录之后保存当前用户的登录态,权限控制装置在获取这个登录态时,将调用getSystemUser接口事获取业务系统的用户登录态。业务系统实现该抽象接口的时间将登录成功保存登录态的同时,权限控制装置获取到系统用户(如用户A)的登录态保存在缓存中(如TheadLocal或内存Map)。
当权限控制装置要做权限过滤时,将从缓存从取出系统用户(如用户A)该登录态,当系统用户(如用户A)处于已登录状态时,然后从上述数据权限配置表中,将该用户A的数据权限配置信息提取出来,封装到数据权限对象PermissionVo中并缓存。
这样,在权限控制装置进行拦截原始SQL请求时,会读取出当前登录用户A存在缓存中的数据权限对象(PermissionVo),从而在数据权限对象解析出用户A所拥有的权限因子,包括业务表权限和表字段权限。
在一些实施例中,为了便于管理权限,基础数据和拥有的表字段范围、表字段的操作规则、字段表达式值或值范围等权限因子,这些元数据或者说因子解析出来后放到一个个对象中,其中,数据权限对象PermissionVo是根对象。根对像里面的元素包括业务表权限对象为TableDefinedEntity,对象包含表名,表别名,表注释、引用的表字段对像集合等(这里的表字段对像集合就是用户拥用该表的可操作字段范围),以及其其他表字段权限对象。如表字段范围对像为FieldDefinedEntity,包含字段名,字段别名,字段类型(如String类型的字段要解析成对应的varchar类型,并且表达式值在拼接时会加上两个单引号);和表字段的配置权限字段对象等,如表达式规则(如=、<>、>、in、between等)、字段表达式值(如auto,2020-1101and 2021-1101)、字段连接类型如(and、or)、字段位置(是放在select后面的展示列字段呢还是作为Where后面的查询条件)等。权限控制器可以从上述根对象中依次解析出对应的各权限因子。
S40:将所述业务表权限和所述原始SQL的查询范围进行对比判断。
S50:当所述查询请求的查询范围在所述业务表权限内,按照所述表字段权限更改所述原始SQL请求的SQL查询逻辑段,得到目标SQL请求。
S60:将所述目标SQL请求放行至数据库中,以使所述数据库响应所述目标SQL请求执行数据查询。
如前述实施例,在得到业务表权限之后,会将所述业务表权限和所述原始SQL请求的查询范围进行对比判断。
示例性的,假设存在一个业务查询功能,是用户A触发对两张业务表进行联接查询,例如,这两张业务表分别是表1表和表2,也就是说原始SQL请求的数据查询范围是表1和表2,拿到该原始SQL请求后会和当前用户A拥有的业务表权限进行对比判断。
很明显,判断结果存在两种情况:
第一种,所述查询请求的查询范围在所述业务表权限内,也即用户A拥有表1和表2的权限,当所述原始SQL请求的查询范围在所述业务表权限内,则按照所述表字段权限更改所述原始SQL请求的SQL查询逻辑段,得到目标SQL请求。
第二种,所述原始SQL请求的查询范围的部分查询范围或全部查询范围未在所述业务表权限内,例如,用户A拥有表1的权限但未拥有表2的权限、或用户A拥有表2的权限但未拥有表1的权限、或用户A未拥有表1的权限也未拥有表2的权限。
在一应用场景中,假设现在要根据上述这些权限因子,来把一个拥有10个字段的业务表生成SQL查询逻辑段,本申请实施例会这么做,暂时以表1为例好:
某用户A拥有这个表1的权限,并且拥有这个表1其中3个字段。如果这3个字段中,每个字段都拥有select和where位置类型权限,那么字段范围就可以拼接claim_seq asclaimSeq,claim_type as claimType,claim_date as claimDate。再根据这3个字段连接类型,本申请可以把字段规则和字段表达式值,拼接成claim_seq>1and claim_type=’auto’and claim_date between 2020-1101and 2021-1101。这样一来,就得到了展示列表的SQL段和作为查询条件的SQL段,得到最终的SQL查询逻辑段。
举个例子,若是上述第一种情况,如果两张表都拥有权限将进行下一步匹配,从表1开始,匹配到该表1的权限之后,会把这个表1在原始SQL查询请求对应的SQL查询逻辑段出现的展示列段,替换成已经通过权限因子生成的这个表的展示列段。
例如,这个原始SQL请求中SQL查询逻辑段是对表1的全字段查询(如10个字段),当该用户A只拥有这个表1的其中某3个字段时,这个时候本申请会把这10个字段的SQL查询逻辑段的展示列段清除掉,替换成本申请实施例生成的这3个字段的展示列表段,对于关联表2,也是同样的操作,这里不重复说明。这个时候第一步替换完成。第二步是在原有的SQL查询逻辑段where语句后面,拼接我们生成的查询条件SQL段,这样就实现将依据用户A的表字段权限生成的SQL查询逻辑段,替换和拼接到原始SQL请求的SQL查询逻辑段中,并依据替换和拼接后的SQL查询逻辑段生成目标SQL请求。
需要说明的是,上述例子其实仅是其中一种依据表字段权限进行改写的示例,并不对本申请实施例造成限定,如前述实施例,表字段权限还可以包括表字段的操作规则、表达式值或范围值等权限配置,若原始SQL请求中查涉及这些权限,也会依据用户实际的权限进行改写,这里不一一重复说明。
这时调整完成后,权限控制装置会放行并移交新生成的目标SQL请求给数据库执行查询。
在一些实施例中,如图4所示,步骤40之后,也即所述将所述业务表权限和所述原始SQL的查询范围进行对比判断之后,所述方法还包括如下步骤:
S70:当所述原始SQL请求的查询范围的部分查询范围或全部查询范围未在所述业务表权限内,则将所述SQL查询逻辑段的where语句后面的查询条件字段全部清除,以生成所述目标SQL请求。
当所述原始SQL请求的查询范围的部分查询范围或全部查询范围未在所述业务表权限内,如对于表1和表2,如果系统用户A只拥有其中一张表的权限而关联表没有权限,那权限控制装置将会把原始SQL请求的SQL查询逻辑段的where语句后面的查询条件全部清除,在一些实施例中,可以原始SQL请求的SQL查询逻辑段的where语句后面的查询条件替换成0,以生成目标SQL请求放行至数据库,这样查询结果将为是空,也意味着该用户A关于此次查询的功能无权限。
在一些实施例中,步骤S60之后,也即所述将所述目标SQL请求放行至数据库中,以使所述数据库响应所述目标SQL请求执行数据查询之后,所述方法还包括如下步骤:
S80:接收所述数据库响应所述目标SQL请求执行进行数据查询得到的查询数据;
S90:将所述查询数据转换为预设格式,并将经过所述转换的所属查询数据返回到所述前端。
数据库接收到目标SQL请求之后,便可依据目标SQL请求中SQL查询逻辑段查询数据,即按照用户权限进行查询数据之后,权限控制装置对查询数据之转换成预设格式(JSON格式)的数据,并返回到前端,这样前端便得到授权限控制的数据。
在一些实施例中,权限控制装置可以提供一个配置开关项,如trun_on=true,配置在引入本权限控制装置的业务系统的配置文件中,当配置值为true时,可以根据当前用户配置的权限来执行上述权限控制的过程,以进行数据权限过滤,反之,不做任何过滤。
在一些实施例中,业务系统的查询请求往往并不是单一的,真实的业务场景将是很多系统用户登录系统并对同一个功能进行了查询操作,只依靠数据库的并发能力无疑是不可取的。所以为了实现权限控制装置的高性能,权限控制装置里面会还可以维护一个线程池处理器,用来优化权限控制装置的线程处理,来达到降低数据库压力和提升系统性能伸缩能力。
综上实施例,通过使用本权限控制装置提供的权限控制方法,能够在业务逻辑代码和原始SQL无侵入的情况下实现业务权限的管控,权限控制交由权限控制装置去做的,实现业务逻辑代码和权限代码的实现完全的解耦,而且能够实现更细的权限管控粒度,使得开发人员不需要为如何给原本就复杂的业务查询SQL,去添加业务权限控制而烦恼,也不需要为权限如何粒度更细绞尽脑汁,只需关注业务逻辑即可,具有极高的应用场景。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
在一实施例中,提供一种基于拦截器的权限控制装置,该基于拦截器的权限控制装置与上述实施例中基于拦截器的权限控制方法一一对应。如图5所示,该基于拦截器的权限控制装置包括拦截模块101、获取模块102、解析模块103、判断模块104、更改模块105和发送模块106。各功能模块详细说明如下:
拦截模块101,用于通过拦截器拦截前端的原始SQL请求,所述原始SQL请求包含数据查询范围;
获取模块102,用于响应所述原始SQL请求,获取当前登陆用户对应的数据权限对象;
解析模块103,用于解析所述数据权限对象,以获取所述用户的权限因子,所述权限因子包括所述用户拥有的业务表权限和表字段权限;
判断模块104,用于将所述业务表权限和所述原始SQL请求的查询范围进行对比判断;
更改模块105,用于当所述查询请求的查询范围在所述业务表权限内,按照所述表字段权限更改所述原始SQL请求的SQL查询逻辑段,得到目标SQL请求;
发送模块106,用于将所述目标SQL请求放行至数据库中,以使所述数据库响应所述目标SQL请求执行数据查询。
在一实施例中,所述将所述业务表权限和所述原始SQL的查询范围进行对比判断,所述更改模块105还用于:
当所述原始SQL请求的查询范围的部分查询范围或全部查询范围未在所述业务表权限内,则将所述SQL查询逻辑段的where语句后面的查询条件字段全部清除,以生成所述目标SQL请求。
在一实施例中,所述表字段权限包括所述表字段范围权限和对所述表字段范围权限内的表字段的配置权限,所述表字段的配置权限包括表字段的操作规则配置权限、表字段允许的表达式值或范围值配置权限、字段连接类型和字段位置类型配置权限。
在一实施例中,基于拦截器的权限控制装置还包括保存模块和封装模块;
获取模块102还用于:所述响应所述原始SQL请求,获取当前登陆用户对应的数据权限对象之前,获取数据权限配置表,所述数据权限配置表包括基础数据配置部分和权限数据配置部分,其中,所述基础数据配置部分包含业务系统的数据源的所有表信息,以及所有表字段信息,所述权限数据配置部分包括各用户的权限配置信息;
保存模块,用于将所述数据权限配置表保存在缓存中;
获取模块102还用于:通过所述业务系统登陆态的抽象接口,获取所述用户的登陆状态;
封装模块,用于当获取到所述用户的登陆态处于已登陆状态时,将所述缓存中的所述数据权限配置表中当前登陆的所述用户的权限配置信息读取出来并封装得到所述数据权限对象;
保存模块,还用于将所述数据权限对象保存在所述缓存中。
在一实施例中,获取模块102,还具体用于:接收后管服务器发送的所述数据权限配置表;其中,所述后管服务器用于根据所述基础数据配置渲染出后管配置页面,所述后管配置页面包含目标系统用户的目标表树,所述目标表树包含分支表,所述分支表包含所述分支表对应的字段的配置选项;所述后管服务器还用户接收后管人员在所述目标表树上的权限配置操作以获取权限数据,并依据所述基础数据和所述权限数据生成所述数据权限配置表。
在一实施例中,
获取模块102,还用于接收所述数据库响应所述目标SQL请求执行进行数据查询得到的查询数据;
发送模块106,还用于将所述查询数据转换为预设格式,并将经过所述转换的所属查询数据返回到所述前端。
综上实施例,通过使用本实施例提供的权限控制装置提,能够在业务逻辑代码和原始SQL无侵入的情况下实现业务权限的管控,权限控制交由权限控制装置去做的,实现业务逻辑代码和权限代码的实现完全的解耦,而且能够实现更细的权限管控粒度,使得开发人员不需要为如何给原本就复杂的业务查询SQL,去添加业务权限控制而烦恼,也不需要为权限如何粒度更细绞尽脑汁,只需关注业务逻辑即可,具有极高的应用场景。
关于基于拦截器的权限控制装置的具体限定可以参见上文中对于基于拦截器的权限控制方法的限定,在此不再赘述。上述基于拦截器的权限控制装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图6所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部服务器通过网络连接通信。该计算机程序被处理器执行时以实现一种基于拦截器的权限控制方法。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
通过拦截器拦截前端的原始SQL请求,所述原始SQL请求包含数据查询范围;
响应所述原始SQL请求,获取当前登陆用户对应的数据权限对象;
解析所述数据权限对象,以获取所述用户的权限因子,所述权限因子包括所述用户拥有的业务表权限和表字段权限;
将所述业务表权限和所述原始SQL请求的查询范围进行对比判断;
当所述查询请求的查询范围在所述业务表权限内,按照所述表字段权限更改所述原始SQL请求的SQL查询逻辑段,得到目标SQL请求;
将所述目标SQL请求放行至数据库中,以使所述数据库响应所述目标SQL请求执行数据查询。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
通过拦截器拦截前端的原始SQL请求,所述原始SQL请求包含数据查询范围;
响应所述原始SQL请求,获取当前登陆用户对应的数据权限对象;
解析所述数据权限对象,以获取所述用户的权限因子,所述权限因子包括所述用户拥有的业务表权限和表字段权限;
将所述业务表权限和所述原始SQL请求的查询范围进行对比判断;
当所述查询请求的查询范围在所述业务表权限内,按照所述表字段权限更改所述原始SQL请求的SQL查询逻辑段,得到目标SQL请求;
将所述目标SQL请求放行至数据库中,以使所述数据库响应所述目标SQL请求执行数据查询。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(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.一种基于拦截器的权限控制方法,其特征在于,包括:
通过拦截器拦截前端的原始SQL请求,所述原始SQL请求包含数据查询范围;
响应所述原始SQL请求,获取当前登陆用户对应的数据权限对象;
解析所述数据权限对象,以获取所述用户的权限因子,所述权限因子包括所述用户拥有的业务表权限和表字段权限;
将所述业务表权限和所述原始SQL请求的查询范围进行对比判断;
当所述查询请求的查询范围在所述业务表权限内,按照所述表字段权限更改所述原始SQL请求的SQL查询逻辑段,得到目标SQL请求;
将所述目标SQL请求放行至数据库中,以使所述数据库响应所述目标SQL请求执行数据查询。
2.如权利要求1所述的基于拦截器的权限控制方法,其特征在于,所述表字段权限包括所述表字段范围权限和对所述表字段范围权限内的表字段的配置权限,所述表字段的配置权限包括表字段的操作规则配置权限、表字段允许的表达式值或范围值配置权限、字段连接类型和字段位置类型配置权限。
3.如权利要求1所述的基于拦截器的权限控制方法,其特征在于,所述将所述业务表权限和所述原始SQL的查询范围进行对比判断之后,所述方法还包括:
当所述原始SQL请求的查询范围的部分查询范围或全部查询范围未在所述业务表权限内,则将所述SQL查询逻辑段的where语句后面的查询条件字段全部清除,以生成所述目标SQL请求。
4.如权利要求1-3任一项所述的基于拦截器的权限控制方法,其特征在于,所述响应所述原始SQL请求,获取当前登陆用户对应的数据权限对象之前,所述方法还包括:
获取数据权限配置表,所述数据权限配置表包括基础数据配置部分和权限数据配置部分,其中,所述基础数据配置部分包含业务系统的数据源的所有表信息,以及所有表字段信息,所述权限数据配置部分包括各用户的权限配置信息;
将所述数据权限配置表保存在缓存中;
通过所述业务系统登陆态的抽象接口,获取所述用户的登陆状态;
当获取到所述用户的登陆态处于已登陆状态时,将所述缓存中的所述数据权限配置表中当前登陆的所述用户的权限配置信息读取出来并封装得到所述数据权限对象;
将所述数据权限对象保存在所述缓存中。
5.如权利要求4所述的基于拦截器的权限控制方法,其特征在于,所述获取数据权限配置表,包括:
接收后管服务器发送的所述数据权限配置表;
其中,所述后管服务器用于根据所述基础数据配置渲染出后管配置页面,所述后管配置页面包含目标系统用户的目标表树,所述目标表树包含分支表,所述分支表包含所述分支表对应的字段的配置选项;所述后管服务器还用户接收后管人员在所述目标表树上的权限配置操作以获取权限数据,并依据所述基础数据和所述权限数据生成所述数据权限配置表。
6.如权利要求1-3任一项所述的基于拦截器的权限控制方法,其特征在于,所述将所述目标SQL请求放行至数据库中,以使所述数据库响应所述目标SQL请求执行数据查询之后,所述方法还包括:
接收所述数据库响应所述目标SQL请求执行进行数据查询得到的查询数据;
将所述查询数据转换为预设格式,并将经过所述转换的所属查询数据返回到所述前端。
7.一种基于拦截器的权限控制装置,其特征在于,包括:
拦截模块,用于通过拦截器拦截前端的原始SQL请求,所述原始SQL请求包含数据查询范围;
获取模块,用于响应所述原始SQL请求,获取当前登陆用户对应的数据权限对象;
解析模块,用于解析所述数据权限对象,以获取所述用户的权限因子,所述权限因子包括所述用户拥有的业务表权限和表字段权限;
判断模块,用于将所述业务表权限和所述原始SQL请求的查询范围进行对比判断;
更改模块,用于当所述查询请求的查询范围在所述业务表权限内,按照所述表字段权限更改所述原始SQL请求的SQL查询逻辑段,得到目标SQL请求;
发送模块,用于将所述目标SQL请求放行至数据库中,以使所述数据库响应所述目标SQL请求执行数据查询。
8.如权利要求7所述的权限控制装置,其特征在于,所述更改模块还用于:
当所述原始SQL请求的查询范围的部分查询范围或全部查询范围未在所述业务表权限内,则将所述SQL查询逻辑段的where语句后面的查询条件字段全部清除,以生成所述目标SQL请求。
9.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至6任一项所述的基于拦截器的权限控制方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述的基于拦截器的权限控制方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111547538.0A CN114065296A (zh) | 2021-12-16 | 2021-12-16 | 基于拦截器的权限控制方法、装置、计算机设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111547538.0A CN114065296A (zh) | 2021-12-16 | 2021-12-16 | 基于拦截器的权限控制方法、装置、计算机设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114065296A true CN114065296A (zh) | 2022-02-18 |
Family
ID=80229707
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111547538.0A Pending CN114065296A (zh) | 2021-12-16 | 2021-12-16 | 基于拦截器的权限控制方法、装置、计算机设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114065296A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114706857A (zh) * | 2022-04-22 | 2022-07-05 | 北京友友天宇系统技术有限公司 | 跨多源异构存储系统的统一鉴/授权方法、设备和存储介质 |
CN115481448A (zh) * | 2022-09-16 | 2022-12-16 | 昆仑数智科技有限责任公司 | 数据获取方法、装置、服务器及存储介质 |
CN116401692A (zh) * | 2023-06-07 | 2023-07-07 | 天津金城银行股份有限公司 | 运营数据权限管理方法、系统、计算机设备及存储介质 |
-
2021
- 2021-12-16 CN CN202111547538.0A patent/CN114065296A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114706857A (zh) * | 2022-04-22 | 2022-07-05 | 北京友友天宇系统技术有限公司 | 跨多源异构存储系统的统一鉴/授权方法、设备和存储介质 |
CN115481448A (zh) * | 2022-09-16 | 2022-12-16 | 昆仑数智科技有限责任公司 | 数据获取方法、装置、服务器及存储介质 |
CN116401692A (zh) * | 2023-06-07 | 2023-07-07 | 天津金城银行股份有限公司 | 运营数据权限管理方法、系统、计算机设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114065296A (zh) | 基于拦截器的权限控制方法、装置、计算机设备及介质 | |
US7917607B2 (en) | Software management systems and methods, including use of such systems and methods in a provider-tenant environment | |
US7680825B2 (en) | Systems and methods for generating tenant-specific properties for use in a provider-tenant environment | |
US7689593B2 (en) | Systems and methods for accessing a shared space in a provider-tenant environment | |
US7933869B2 (en) | Method and system for cloning a tenant database in a multi-tenant system | |
US8069184B2 (en) | Systems and methods to implement extensibility of tenant content in a provider-tenant environment | |
US7693851B2 (en) | Systems and methods for implementing a shared space in a provider-tenant environment | |
US7698284B2 (en) | Systems and methods for deploying a tenant in a provider-tenant environment | |
US20080162509A1 (en) | Methods for updating a tenant space in a mega-tenancy environment | |
US7739348B2 (en) | Systems and methods for accessing a shared space in a provider-tenant environment by using middleware | |
US20070156849A1 (en) | Systems and methods for delivering software upgrades in a provider-tenant environment | |
US20070156901A1 (en) | Generation and use of table links in a provider-tenant environment | |
US20070162969A1 (en) | Provider-tenant systems, and methods for using the same | |
US20070156699A1 (en) | Systems and methods for generating tenant templates for use in a provider-tenant environment | |
US20070156714A1 (en) | Systems and methods for analyzing tenant-specific properties for use in a provider-tenant environment | |
CN110188573B (zh) | 分区授权方法、装置、设备及计算机可读存储介质 | |
US20070156902A1 (en) | Systems and methods for implementing a tenant space in a provider-tenant environment | |
US20070162451A1 (en) | Systems and methods for linking a tenant to a provider | |
US20080162483A1 (en) | Methods and systems for protecting shared tables against unauthorized overwriting from a tenant space in a mega-tenancy environment | |
US20080162536A1 (en) | Systems and methods for extending shared data structures with tenant content in a provider-tenant environment | |
CN101727475B (zh) | 一种获取数据库访问过程的方法、装置及系统 | |
US20080162587A1 (en) | Server synchronization for maintenance activities | |
CN110941630A (zh) | 一种数据库运维方法、装置及系统 | |
CN110765484A (zh) | 一种征信数据处理方法及电子设备 | |
US20040019809A1 (en) | System and method for providing entity-based security |
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 |