一种数据权限的解析方法技术

技术编号:20623108 阅读:22 留言:0更新日期:2019-03-20 14:40
本发明专利技术公开了一种数据权限的解析方法,将权限条件语句转化为条件实体,所述的条件实体包括以下属性:条件列名,条件符号,条件值,and条件数组,or条件数组,所述的解析方法包括以下步骤:组装条件实体;计算条件实体。本发明专利技术主要介绍一种基于条件实体以及将布尔表达式的条件语句解析成为条件实体的方法,通过对条件实体的设计及表达式解析过程的设计,使得数据权限控制条件语句可以直接存储在数据库中,通过解析可以轻易实现条件语句与条件实体的转化,具有简洁、实用、高效、通用、易扩展的特点。

An Analytical Method of Data Permission

The present invention discloses an analytical method of data permission, which converts permission conditional statement into conditional entity. The conditional entity includes the following attributes: conditional column name, conditional symbol, conditional value, and conditional array, or conditional array. The analytical method includes the following steps: assembling conditional entity; computing conditional entity. The invention mainly introduces a method of parsing conditional statement into conditional entity based on conditional entity and Boolean expression. Through the design of conditional entity and the design of expression parsing process, the conditional statement of Data permission control can be directly stored in the database, and the transformation between conditional statement and conditional entity can be easily realized by parsing, which is concise and practical. It has the characteristics of high efficiency, versatility and easy expansion.

【技术实现步骤摘要】
一种数据权限的解析方法
本专利技术涉及计算机软件
,特别是一种数据权限的解析方法。
技术介绍
在计算机软件设计与开发过程中,权限管理几乎成为系统设计中必不可少的一部分,每一个系统都会涉及到不同的程度的权限控制。当管理员在配置一个较为复杂的权限时,无可避免的会对所配置的权限条件进行存储,这个存储条件既需要传递给前端供管理员查看,也需要转化为控制条件用于逻辑计算,所以这个存储条件需要结构简单,逻辑清晰,易于转化,方便修改,怎样存储这个条件成为急需解决的问题。对于这个问题,现无成熟解决方案。当下最主要的解决方案是将复杂的条件进行拆分,将每一个条件及条件之间的关系都存储在数据库中,当使用这些条件的时候,无可避免的要对这些条件以及条件之间的关系查询出来,然后根据条件之间的关系进行组装,能拿到完整的条件结构。查询的时候,需要先查询条件关系,然后根据条件关系中对条件的引用查询下一个条件或者条件关系,这样对于一个十几个条件的表达式,需要进行几十次甚至上百次的数据库操作,才能将关系查询出来,这无疑是很耗时的,并且将每个条件存储到数据库中,也比较浪费空间,所以急需一种既能减少数据库操作,并且转化不费时的方法来取代该方法。
技术实现思路
为解决现有技术中存在的问题,本专利技术的目的是提供一种数据权限的解析方法,该方法解决了现有技术多次操作数据库耗时及存储量大的缺点,具有简洁、实用、高效、通用、易扩展的特点。为实现上述目的,本专利技术采用的技术方案是:一种数据权限的解析方法,将权限条件语句转化为条件实体,所述的条件实体包括以下属性:条件列名,表示该条件的实体;条件符号,表示该条件的运算符号;条件值,紧跟着所述条件符号,表示该条件的运算值;and条件数组,表示与该条件是and关系的条件数组;or条件数组,表示与该条件是or关系的条件数组;其中,所述的运算符号包括等于,不等于,大于,大于等于,小于,小于等于,NULL,NOT_NULL,LIKE,NOT_LIKE,IN,NOT_IN;本专利技术涉及到的实体类型,一种是真实的条件实体,一种是虚拟的条件实体:真实的条件实体,表示一个正常的condition表达式,比如“name>20”可以表示为一个条件列名为name,条件符号为大于,条件值为20,and条件数组为空,or条件数组为空的一个条件;虚拟的条件实体,表示一个虚拟的表达式对象,虚拟条件包括True条件实体、False条件实体,主要的作用是用于代替“()”的作用,使得既存在“&&”又存在“||”的多混合条件可以与另一个条件进行“&&”或者“||”运算。所述的解析方法包括以下步骤:S1、组装条件实体,将各权限条件语句的表达式中的条件符号计算出来,并根据条件列名、条件符号以及条件值组装成相应的条件实体,将各条件实体通过“()”以及逻辑运算符“&&”和“||”组装后进行表达;S2、计算条件实体,按照先计算同级条件实体之间的“&&”运算,再计算同级条件实体之间的“||”运算,最后计算括号的方法对步骤S1中组装后的各条件实体进行计算,则每一个括号都会创建一个满足布尔表达式的True条件实体或False条件实体,最终计算出的条件实体即为解析出的数据权限。优选地,所述步骤S1具体包括以下步骤:S11、输入字符串格式的权限条件语句组成的表达式,按照空格分割字符串成队列Str;S12、设栈集合S为空;S13、依次遍历Str,得到队列元素s,如果s不存在,则转到步骤S18,如果s以“(”开头,则转到步骤S14,如果s属于{&&,||},则转到步骤S15,如果s以“)”结尾,则转到步骤S16,否则转到步骤S17;S14、拆分s中的“(”及条件列名,并将每一个“(”拆分出来入栈,将条件列名入栈,转到步骤S13;S15、弹出最近入栈的第一个元素,如果该元素为“NULL”或者“NOT_NULL”,则再弹出栈顶元素,并组装成一个条件实体,否则再弹出两个元素,并组装为一个条件实体,将组装的条件实体入栈,s入栈,转到步骤S13;S16、拆分出“)”部分,判断剩下部分,如果该元素为“NULL”或者“NOT_NULL”,则再弹出栈顶的第一个元素,并组装成一个条件实体;否则再弹出两个元素,并组装为一个条件实体,将组装的条件实体入栈,并将剩下的“)”部分拆分为单个“)”入栈,转到步骤S13;S17、将s入栈,转到步骤S13;S18、返回栈S。优选地,所述步骤S2具体包括以下步骤:S21、输入队列A,栈为S;S22、依次取出A中的元素a,如果a不存在,转到步骤S27,如a是“)”,转到步骤S23,否则压入S的栈顶;S23、从S中依次弹出栈顶对象,直到找到第一个“(”,取出两者之间的所有元素记作S1,转到步骤S24;S24、依次取出S1集合中的元素记作i,如果元素i是条件实体,则将元素i记为当前元素,转到步骤S25;S25、判断当前元素i的后一个对象是否为“&&”,如果是,则依次扫描偶数位是否存在连续“&&”,直到数组结束或者遇到“||”,并将“||”与元素i之间的条件实体组装为数组赋值给第一个条件实体的and条件数组,并将当前元素i变为“||”符号后一个对象,重复步骤S25;如果S1集合遍历完毕,转到步骤S26;S26、将S1集合中除第一个条件实体的部分组成or条件数组,赋值给S1中第一个条件实体记作Con1的or条件数组,此时从A中去掉栈顶“(”元素,并判断a的下一个元素是否为“&&”,如果为“&&”,创建一个False条件实体Con2,并将Con1赋值给Con2的or属性中;如果为“||”,创建True条件实体Con2,并将Con1赋值给Con2的and属性中,并将Con2入栈,转到步骤S22;S27、返回栈的第一个元素。本专利技术的有益效果是:本专利技术主要介绍一种基于条件实体以及将布尔表达式的条件语句解析成为条件实体的方法,通过对条件实体的设计及表达式解析过程的设计,使得数据权限控制条件语句可以直接存储在数据库中,通过解析可以轻易实现条件语句与条件实体的转化,具有简洁、实用、高效、通用、易扩展的特点。附图说明图1为本专利技术实施例的流程框图;图2为本专利技术实施例拆分表达式组装为条件实体的流程框图;图3为本专利技术实施例计算得到最终条件实体的流程框图。具体实施方式下面结合附图对本专利技术的实施例进行详细说明。实施例如图1所示,一种数据权限的解析方法,将权限条件语句转化为条件实体,所述的条件实体包括以下属性:条件列名,表示该条件的实体;条件符号,表示该条件的运算符号;条件值,紧跟着所述条件符号,表示该条件的运算值;and条件数组,表示与该条件是and关系的条件数组;or条件数组,表示与该条件是or关系的条件数组;其中,所述的运算符号包括等于,不等于,大于,大于等于,小于,小于等于,NULL,NOT_NULL,LIKE,NOT_LIKE,IN,NOT_IN;所述的解析方法包括以下步骤:S1、组装条件实体,将各权限条件语句的表达式中的条件符号计算出来,并根据条件列名、条件符号以及条件值组装成相应的条件实体,将各条件实体通过“()”以及逻辑运算符本文档来自技高网...

【技术保护点】
1.一种数据权限的解析方法,其特征在于,将权限条件语句转化为条件实体,所述的条件实体包括以下属性:条件列名,表示该条件的实体;条件符号,表示该条件的运算符号;条件值,紧跟着所述条件符号,表示该条件的运算值;and条件数组,表示与该条件是and关系的条件数组;or条件数组,表示与该条件是or关系的条件数组;其中,所述的运算符号包括等于,不等于,大于,大于等于,小于,小于等于,NULL,NOT_NULL,LIKE,NOT_LIKE,IN,NOT_IN;所述的解析方法包括以下步骤:S1、组装条件实体,将各权限条件语句的表达式中的条件符号计算出来,并根据条件列名、条件符号以及条件值组装成相应的条件实体,将各条件实体通过“()”以及逻辑运算符“&&”和“||”组装后进行表达;S2、计算条件实体,按照先计算同级条件实体之间的“&&”运算,再计算同级条件实体之间的“||”运算,最后计算括号的方法对步骤S1中组装后的各条件实体进行计算,则每一个括号都会创建一个满足布尔表达式的True条件实体或False条件实体,最终计算出的条件实体即为解析出的数据权限。

【技术特征摘要】
1.一种数据权限的解析方法,其特征在于,将权限条件语句转化为条件实体,所述的条件实体包括以下属性:条件列名,表示该条件的实体;条件符号,表示该条件的运算符号;条件值,紧跟着所述条件符号,表示该条件的运算值;and条件数组,表示与该条件是and关系的条件数组;or条件数组,表示与该条件是or关系的条件数组;其中,所述的运算符号包括等于,不等于,大于,大于等于,小于,小于等于,NULL,NOT_NULL,LIKE,NOT_LIKE,IN,NOT_IN;所述的解析方法包括以下步骤:S1、组装条件实体,将各权限条件语句的表达式中的条件符号计算出来,并根据条件列名、条件符号以及条件值组装成相应的条件实体,将各条件实体通过“()”以及逻辑运算符“&&”和“||”组装后进行表达;S2、计算条件实体,按照先计算同级条件实体之间的“&&”运算,再计算同级条件实体之间的“||”运算,最后计算括号的方法对步骤S1中组装后的各条件实体进行计算,则每一个括号都会创建一个满足布尔表达式的True条件实体或False条件实体,最终计算出的条件实体即为解析出的数据权限。2.根据权利要求1所述的数据权限的解析方法,其特征在于,所述步骤S1具体包括以下步骤:S11、输入字符串格式的权限条件语句组成的表达式,按照空格分割字符串成队列Str;S12、设栈集合S为空;S13、依次遍历Str,得到队列元素s,如果s不存在,则转到步骤S18,如果s以“(”开头,则转到步骤S14,如果s属于{&&,||},则转到步骤S15,如果s以“)”结尾,则转到步骤S16,否则转到步骤S17;S14、拆分s中的“(”及条件列名,并将每一个“(”拆分出来入栈,将条件列名入栈,转到步骤S13;S15、弹出最近入栈的第一个元素,如果该元素为“NULL”或者“NOT_NULL”,则再弹出栈顶元素,并组装成一个条件...

【专利技术属性】
技术研发人员:廖洪孙瑞
申请(专利权)人:四川长虹电器股份有限公司
类型:发明
国别省市:四川,51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1