CN115168831A - 访问权限的验证方法和装置 - Google Patents

访问权限的验证方法和装置 Download PDF

Info

Publication number
CN115168831A
CN115168831A CN202210782604.0A CN202210782604A CN115168831A CN 115168831 A CN115168831 A CN 115168831A CN 202210782604 A CN202210782604 A CN 202210782604A CN 115168831 A CN115168831 A CN 115168831A
Authority
CN
China
Prior art keywords
expression
operator
stack
current
parameter
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
Application number
CN202210782604.0A
Other languages
English (en)
Inventor
朱丽双
石强
张良虎
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Jingdong City Beijing Digital Technology Co Ltd
Original Assignee
Jingdong City Beijing Digital Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Jingdong City Beijing Digital Technology Co Ltd filed Critical Jingdong City Beijing Digital Technology Co Ltd
Priority to CN202210782604.0A priority Critical patent/CN115168831A/zh
Publication of CN115168831A publication Critical patent/CN115168831A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/45Structures or tools for the administration of authentication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/31User authentication

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

本发明公开了一种访问权限的验证方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:获取权限验证请求,所述权限验证请求包括待访问的资源标识和参数信息;根据所述资源标识获取资源对应的访问条件表达式,所述访问条件表达式是根据资源的权限验证配置信息生成的,所述权限验证配置信息包括待验证的参数、每个参数的验证规则,以及不同参数之间的逻辑关系;使用表达式计算工具,根据所述参数信息对所述访问条件表达式进行计算,得到权限验证结果。该实施方式节约了维护成本,解决了现有的权限验证方式维护成本高且不够灵活,以及不支持对多个属性的复杂运算来进行权限验证的技术问题。

Description

访问权限的验证方法和装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种访问权限的验证方法和装置。
背景技术
当用户需要对业务***中的资源进行访问时,业务***会调用权限***对用户进行访问权限的验证,在权限验证通过后,授权用户进行资源访问,可以保护业务***资源的安全。目前比较常用的权限验证方法是基于属性的访问控制(简称是ABAC)验证。ABAC是通过动态的计算一个或者一组属性,来验证当前主体是否有权限访问某个资源。其核心是表达式的动态计算,目前关于ABAC权限表达式的判断有以下两种方式:
1、根据权限***约定验证的场景及对象,业务***按约定传入属性,权限***读取指定的属性进行判断;
2、业务***在权限***配置验证某个属性值,在需要权限验证时,调用权限***的服务,通过反射的方式取出特定的值进行计算判断。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
第一种方式,权限***需要为业务***定制化开发,后期维护成本高且不够灵活;第二种方式,无法支持对多个属性的计算进行权限验证和基于复杂的组合运算方式进行权限验证。
发明内容
有鉴于此,本发明实施例提供一种访问权限的验证方法和装置,能够节约维护成本,解决了现有的权限验证方式维护成本高且不够灵活,以及不支持对多个属性的复杂运算来进行权限验证的技术问题。
为实现上述目的,根据本发明实施例的一个方面,提供了一种访问权限的验证方法,包括:获取权限验证请求,所述权限验证请求包括待访问的资源标识和参数信息;根据所述资源标识获取资源对应的访问条件表达式,所述访问条件表达式是根据资源的权限验证配置信息生成的,所述权限验证配置信息包括待验证的参数、每个参数的验证规则,以及不同参数之间的逻辑关系;使用表达式计算工具,根据所述参数信息对所述访问条件表达式进行计算,得到权限验证结果。
可选地,所述参数的验证规则包括基于自定义函数实现的验证规则。
可选地,所述不同参数之间的逻辑关系基于具有不同优先级的运算符来进行表示。
可选地,使用表达式计算工具,根据所述参数信息对所述访问条件表达式进行计算,包括:根据预定义的独立元素的类型,对所述访问条件表达式进行拆分得到独立元素集合;根据所述独立元素的类型,将所述独立元素集合转换成后缀表达式;根据所述参数信息计算所述后缀表达式以对所述访问条件表达式进行计算。
可选地,所述独立元素的类型包括运算符、自定义函数和操作数,根据预定义的独立元素的类型,对所述访问条件表达式进行拆分得到独立元素集合,包括:循环读取所述访问条件表达式的每个字符,并根据预定义的独立元素的类型,判断单个字符或者字符串所属的独立元素的类型,并根据判断结果确定独立元素集合,其中,对于读取的当前字符,若当前字符不是运算符,则将所述当前字符存储到预先建立的字符串变量中;若当前字符是运算符,且不是左括号运算符,则判断所述当前字符与预读取的下一个字符是否组合成一个新的运算符;若是,则将所述当前字符与所述下一个字符作为一个运算符,添加到独立元素集合中,并将所述字符串变量中存储的数据作为一个独立元素添加到所述独立元素集合中;否则,将所述当前字符作为一个运算符添加到独立元素集合中,并将所述字符串变量中存储的数据作为一个独立元素添加到所述独立元素集合中;若当前字符是左括号运算符,则判断所述字符串变量中是否存储有数据;若是,则将所述当前字符与所述字符串变量中存储的数据作为自定义函数的左半部分,并循环读取下一个字符直至读取到右括号运算符,将读取的字符作为自定义函数的右半部分,将所述自定义函数的左半部分和右半部分组合为一个自定义函数,添加到所述独立元素集合中;否则,将所述当前字符作为一个运算符添加到所述独立元素集合中;若在循环结束时,所述字符串变量中仍存储有数据,则将所述字符串变量中存储的数据作为一个独立元素添加到所述独立元素集合中。
可选地,根据所述独立元素的类型,将所述独立元素集合转换成后缀表达式,包括:循环读取所述独立元素集合中的每个元素,并根据所述独立元素的类型,将读取的元素添加到后缀表达式结果集中,其中,对于读取的当前元素,若当前元素是操作数或自定义函数,则将所述当前元素添加到后缀表达式结果集中;若当前元素是左括号运算符,则将所述当前元素压入栈中;若当前元素是右括号运算符,且栈顶不是左括号运算符,则将栈内元素依次出栈直至栈顶是左括号运算符,将所述栈顶的左括号运算符和所述当前元素丢弃,根据出栈顺序将所出栈的元素保存到所述后缀表达式结果集中;若当前元素不是左括号运算符或右括号运算符,且读取所述当前元素时栈为空,则将所述当前元素压入栈中;若当前元素不是左括号运算符或右括号运算符,且读取所述当前元素时栈不为空,则在所述当前元素的优先级高于栈顶元素的优先级的情况下,将所述当前元素压入栈中;在所述当前元素的优先级不高于栈顶元素的优先级的情况下,将栈内元素出栈直至栈顶是左括号运算符或栈为空,并根据出栈顺序将所出栈的元素保存到所述后缀表达式结果集中,将所述当前元素压入栈中;若在循环结束时,栈不为空,则将栈内元素依次出栈直至栈为空,并根据出栈顺序将所出栈的元素保存到所述后缀表达式结果集中。
可选地,根据所述参数信息计算所述后缀表达式以对所述访问条件表达式进行计算,包括:循环读取所述后缀表达式的每个元素,并进行如下操作,直至所有元素均被读取:若当前元素不是运算符,则将所述当前元素压入栈中;若当前元素是运算符,则从栈中依次出栈两个元素作为两个运算参数;根据所述运算符和所述两个运算参数进行计算,并将计算结果压入栈中。
可选地,根据所述运算符和所述两个运算参数进行计算之前,还包括:若出栈的元素为自定义函数,则对所述自定义函数进行拆分得到自定义函数名和所述自定义函数的参数名;根据所述自定义函数名获取所述自定义函数表达式,根据所述自定义函数的参数名获取所述自定义函数的参数值,其中,若所述自定义函数的参数不是常量,则从所述参数信息中查找所述自定义函数的参数名对应的参数值作为所述自定义函数的参数值;根据所述自定义函数表达式和所述自定义函数的参数值进行计算,将计算结果作为所述自定义函数对应的运算参数。
可选地,根据所述运算符和所述两个运算参数进行计算之前,还包括:若出栈的元素为变量,则根据拆分符对所述变量进行拆分,得到要访问资源的对象标识和参数名;通过反射的方式,从所述参数信息中查找与所述对象标识和所述参数名相对应的参数值,作为所述变量对应的运算参数。
根据本发明实施例的另一方面,提供了一种访问权限的验证装置,包括:
请求获取模块,用于获取权限验证请求,所述权限验证请求包括待访问的资源标识和参数信息;
表达式获取模块,用于根据所述资源标识获取资源对应的访问条件表达式,所述访问条件表达式是根据资源的权限验证配置信息生成的,所述权限验证配置信息包括待验证的参数、每个参数的验证规则,以及不同参数之间的逻辑关系;
表达式计算模块,用于使用表达式计算工具,根据所述参数信息对所述访问条件表达式进行计算,得到权限验证结果。
根据本发明实施例的又一方面,提供了一种访问权限的验证电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例所提供的访问权限的验证方法。
根据本发明实施例的再一方面,提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明实施例所提供的访问权限的验证方法。
上述发明中的一个实施例具有如下优点或有益效果:通过获取权限验证请求,权限验证请求包括待访问的资源标识和参数信息;根据资源标识获取资源对应的访问条件表达式,访问条件表达式是根据资源的权限验证配置信息生成的,权限验证配置信息包括待验证的参数、每个参数的验证规则,以及不同参数之间的逻辑关系;使用表达式计算工具,根据参数信息对访问条件表达式进行计算,得到权限验证结果的技术方案,可以根据资源的权限验证配置信息生成支持多属性、复杂运算逻辑的表达式,并通过对复杂表达式的计算来进行权限验证,无需针对业务***进行定制化开发,节约了维护成本,从而解决了现有的权限验证方式维护成本高且不够灵活,以及不支持对多个属性的复杂运算来进行权限验证的技术问题。同时,本发明的权限验证方法还支持自定义函数的设置,通过自定义函数来实现更灵活地对权限进行验证。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的访问权限的验证方法的主要步骤示意图;
图2是本发明一个实施例的访问权限的验证方法实现流程示意图;
图3是本发明一个实施例的将表达式拆分为独立元素的实现流程示意图;
图4是本发明一个实施例的将独立元素集合生成后缀表达式的实现流程示意图;
图5是本发明一个实施例的后缀表达式的计算过程示意图;
图6是根据本发明实施例的访问权限的验证装置的主要模块示意图;
图7是本发明实施例可以应用于其中的示例性***架构图;
图8是适于用来实现本发明实施例的终端设备或服务器的计算机***的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
为了解决现有技术中存在的技术问题,本发明提供了一种访问权限的验证方法和装置,可以根据资源的权限验证配置信息生成支持复杂运算的表达式,并通过对复杂表达式的计算来进行权限验证,从而解决了现有的权限验证方式维护成本高且不够灵活,以及不支持对多个属性的复杂运算来进行权限验证的技术问题。
图1是根据本发明实施例的访问权限的验证方法的主要步骤示意图。如图1所示,本发明实施例的访问权限的验证方法主要包括如下的步骤S101至步骤S103。
步骤S101:获取权限验证请求,所述权限验证请求包括待访问的资源标识和参数信息。其中,参数信息是要访问资源时需要的权限验证参数信息,一般包括参数名和参数值。根据权限验证***的配置可以得到访问资源所需要提交的参数信息。当业务***需要访问资源存储服务器中保存的某资源时,会通过发送权限验证请求来调用权限验证***进行权限验证。在本发明的实施例中,权限验证***以ABAC***为例来进行介绍。
步骤S102:根据所述资源标识获取资源对应的访问条件表达式,所述访问条件表达式是根据资源的权限验证配置信息生成的,所述权限验证配置信息包括待验证的参数、每个参数的验证规则,以及不同参数之间的逻辑关系。权限验证***在接收到业务***发来的权限验证请求后,首先获取待访问的资源标识,然后根据该资源标识获取资源对应的访问条件表达式。
在本发明的实施例中,权限验证***对其要进行权限验证的每个资源会进行具体的验证规则配置。在权限验证***中配置资源的验证规则时,由管理员登录到权限验证***,配置要管理的资源,如会议室预定,配置的资源的资源标识是meeting_reservation。
根据本发明的技术方案,为了使权限验证***可配置,且支持多个属性参数和复杂运算来进行权限验证,本发明会对权限验证***的配置模块进行改进,可以配置资源校验所需要的不少于一个参数,每个参数的验证规则,以及这些参数之间的复杂逻辑关系等,同时还可以根据这些配置信息生成访问条件表达式。另外,在配置界面上也可以直接设置访问条件表达式。
根据本发明的一个实施例,所述参数的验证规则包括基于自定义函数实现的验证规则。本发明的权限验证***可以支持通过自定义函数来实现的验证规则,为了实现该功能,可以实现一个自定义函数接口。通过调用该自定义函数接口来自定义函数,实现自定义的验证规则。
在本发明的实施例中,所述不同参数之间的逻辑关系基于具有不同优先级的运算符来进行表示。本发明的权限验证***会实现一个运算符号的枚举类,把支持的运算符按照优先级分成了5个等级,优先级从高到低依次是:1)左括号,右括号,自定义函数;2)乘号、除号;3)加号、减号;4)大于、小于、大于等于、小于等于、不等于、等于;5)与、或。
另外,本发明还需要实现一个表达式的服务类,主要包括:(1)注册自定义函数的方法:用于注册自定义的函数;(2)添加表达式的参数方法:用于设置表达式变量值;(3)表达式的计算方法:参数是一个表达式用于计算表达式的值。通过该表达式的服务类即可根据资源的权限验证配置信息生成访问条件表达式,并对访问条件表达式进行计算,从而进行权限验证。
根据本发明的一个实施例,根据配置信息生成的访问条件表达式例如是:(user.level+dynamicLevel(user)>6&&user.age>=25)||(user.code=='superAdmin')||adminCheck(user),代表的业务含义是:用户的等级大于6,且年龄大于等于25,或者用户的编码是‘superAdmin’,或者用户是一个管理员。其中,dynamicLevel(user)就是一个自定义函数。自定义函数一般是为了处理某个业务上的信息,比如用户的等级,这个用户等级一般是根据用户自身的信息计算出来的,一般会自定义一个函数来实现。如果在ABAC***的权限验证中需要用到用户的等级,就需要ABAC***的访问条件表达式能调用这个函数。
权限验证***ABAC***在对资源的权限验证进行配置之后,会将鉴权所需要的信息提供给业务***,包括资源标识、访问条件表达式所需要的参数信息、自定义函数信息,等。业务***根据ABAC***提供的资源标识、自定义函数信息及参数信息等调用ABAC的鉴权服务进行权限验证。权限验证***根据业务***发来的权限验证请求中包括的资源标识,即可获取到资源对应的访问条件表达式。
步骤S103:使用表达式计算工具,根据所述参数信息对所述访问条件表达式进行计算,得到权限验证结果。权限验证***使用表达式计算工具对访问条件表达式进行计算以进行权限验证,首先需要初始化表达式计算工具,初始化过程如下:
(1)创建一个表达式服务类的实例,即对表达式的服务类进行实例化操作;
(2)如果需要创建自定义函数,则把业务***传入的自定义函数(动态加载到JVM,在加载时会判断是否加载过,如果未加载,则进行加载),注册到表达式的服务实例里;
(3)调用添加表达式的参数方法,把业务***传入的参数信息添加到表达式计算工具中,这个方法有两个参数,一个是参数名key(易一般为字符串),一个是参数值(object)。比如前述的示例中提到的参数user,其对应的参数信息在传入时,参数名key是“user”,参数值是user。注意此处的参数名key需要与表达式里的参数保持一致。
在初始化表达式计算工具之后,即可使用表达式计算工具对访问条件表达式进行计算。
图2是本发明一个实施例的访问权限的验证方法实现流程示意图。如图2所示,其示出了权限验证***ABAC***从资源权限验证配置信息的配置到对访问条件表达式的计算的实现流程,主要包括以下步骤:
1、在ABAC***配置资源的权限验证配置信息;
2、在ABAC***给资源生成访问条件表达式,其中访问条件表达式是基于权限验证配置信息生成的;
3、ABAC***将资源标识和权限验证所需参数信息提供给业务***;
4、业务***根据资源标识、自定义函数信息(若需要基于自定义函数进行权限验证,则需包括此项内容)和参数信息生成权限验证请求,并根据权限验证请求调用ABAC***的权限验证服务;
5、ABAC***根据权限验证请求获取对应的资源的访问条件表达式;
6、ABAC***初始化表达式计算工具;
7、ABAC***使用表达式计算工具,根据参数信息对访问条件表达式进行计算,得到权限验证结果。
根据本发明的一个实施例,在使用表达式计算工具,根据所述参数信息对所述访问条件表达式进行计算时,具体可以包括:根据预定义的独立元素的类型,对所述访问条件表达式进行拆分得到独立元素集合;根据所述独立元素的类型,将所述独立元素集合转换成后缀表达式;根据所述参数信息计算所述后缀表达式以对所述访问条件表达式进行计算。
在本发明的实施例中,所述独立元素的类型包括运算符、自定义函数和操作数。在本发明的实施例中,根据改造后的后缀表达式来对访问条件表达式进行计算,首先进行访问表达式的拆分,得到一个独立元素集合。后缀表达式也叫逆波兰表达式,是一个很成熟的算法,但是仅支持简单的运算,例如“1+2”这样的由简单的数字和运算符构成的运算。但是在ABAC***对访问条件表达式进行计算时,就不是简单的数字和运算符了,由于访问条件表达式具有变量和自定义函数,且运算符也不局限于简单运算符,所以本发明对独立元素进行了定义,把变量(例如:user.age)、自定义函数(例如:dynamicLevel(user))等都定义成一个独立元素。由此,本发明的独立元素包括:一个运算符,如前述的5个优先级的运算符;一个完整的自定义函数,包括函数名、参数,如dynamicLevel(user);一个操作数,如一个变量user.level、一个数25,一个字符串常量'superAdmin'等。
根据本发明的实施例,根据预定义的独立元素的类型,对所述访问条件表达式进行拆分得到独立元素集合,具体包括:
循环读取所述访问条件表达式的每个字符,并根据预定义的独立元素的类型,判断单个字符或者字符串所属的独立元素的类型,并根据判断结果确定独立元素集合,其中,对于读取的当前字符,
若当前字符不是运算符,则将所述当前字符存储到预先建立的字符串变量中;
若当前字符是运算符,且不是左括号运算符,则判断所述当前字符与预读取的下一个字符是否组合成一个新的运算符;若是,则将所述当前字符与所述下一个字符作为一个运算符,添加到独立元素集合中,并将所述字符串变量中存储的数据作为一个独立元素添加到所述独立元素集合中;否则,将所述当前字符作为一个运算符添加到独立元素集合中,并将所述字符串变量中存储的数据作为一个独立元素添加到所述独立元素集合中;
若当前字符是左括号运算符,则判断所述字符串变量中是否存储有数据;若是,则将所述当前字符与所述字符串变量中存储的数据作为自定义函数的左半部分,并循环读取下一个字符直至读取到右括号运算符,将读取的字符作为自定义函数的右半部分,将所述自定义函数的左半部分和右半部分组合为一个自定义函数,添加到所述独立元素集合中;否则,将所述当前字符作为一个运算符添加到所述独立元素集合中;
若在循环结束时,所述字符串变量中仍存储有数据,则将所述字符串变量中存储的数据作为一个独立元素添加到所述独立元素集合中。
在具体实施过程中,循环读取表达式(在本发明的实施例描述中个,表达式均指代访问条件表达式)的每一个字符,然后判断读取到的单个字符或者字符串属于哪类独立元素,然后根据判断结果确定独立元素集合。
图3是本发明一个实施例的将表达式拆分为独立元素的实现流程示意图。如图3所示,将表达式拆分为独立元素的过程主要包括如下步骤:
1、定义一个字符串变量str用来存储已经读取出来的,但是未能判断属于哪类独立元素的字符。由于独立元素包括运算符、自定义函数和操作数,而其中只有运算符是可以直接判断其所属的独立元素类型,操作数和自定义函数,由于其长度不固定,故而仅读取一个或几个字符时无法直接判断所属的独立元素类型;
2、判断表达式中是否还有未读取的字符,若是,则执行步骤3,否则,结束循环,执行步骤12;
3、按照表达式中字符的顺序,从表达式中读取一个字符,执行步骤4;
4、判断读取的当前字符是否是运算符,若是,则执行步骤5,否则将当前字符保存到字符串变量str中,然后执行步骤2;
5、判断当前字符是否是左括号,若是,则执行步骤6,否则执行步骤9;
6、判断字符串变量str中是否存储有数据,若是,则执行步骤7,否则执行步骤8;
7、按照自定义函数的判定规则读取字符直至得到一个自定义函数,并添加到独立元素集合中。具体地,将当前字符与字符串变量str中存储的数据作为自定义函数的左半部分,并循环读取下一个字符直至读取到右括号运算符,将读取的字符作为自定义函数的右半部分,将自定义函数的左半部分和右半部分组合为一个自定义函数,添加到独立元素集合中。然后,执行步骤2;
8、将当前字符作为一个运算符添加到所述独立元素集合中,然后,执行步骤2;
9、判断当前字符与预读取的下一个字符是否组合成一个新的运算符,若是,则执行步骤10,否则执行步骤11。运算符最多有两个字符长度,例如运算符&&、>=等,因此在对运算符进行判断时,应判断当前读取的运算符与预读取的下一个字符是否可以组合成一个新的运算符;
10、将当前字符的下一个字符从表达式中取出,将当前字符与下一个字符作为一个运算符,添加到独立元素集合中,并将字符串变量str中存储的数据作为一个独立元素添加到独立元素集合中。然后,执行步骤2;
11、将当前字符作为一个运算符添加到独立元素集合中,并将字符串变量中存储的数据作为一个独立元素添加到独立元素集合中。然后,执行步骤2;
12、判断字符串变量str中是否仍存储有数据,若是,则执行步骤13,否则表达式拆分结束,返回拆分后得到的独立元素集合;
13、将字符串变量str中存储的数据作为一个独立元素添加到独立元素集合中,表达式拆分结束,返回拆分后得到的独立元素集合。
根据本发明的实施例,根据图3所示的将表达式拆分为独立元素的实现流程对表达式(user.level+dynamicLevel(user)>6&&user.age>=25)||(user.code=='superAdmin')||adminCheck(user)进行拆分后,得到的独立元素集合(独立元素之间以逗号分隔)为:“(,user.level,+,dynamicLevel(user),>,6,&&,user.age,>=,25,),||,(,user.code,==,'superAdmin',),||,adminCheck(user)”。
根据本发明的技术方案,在将访问条件表达式拆分为独立元素集合之后,即可根据独立元素的类型,将独立元素集合转换成本发明中改造后的后缀表达式。
根据本发明的其中一个实施例,根据所述独立元素的类型,将所述独立元素集合转换成后缀表达式,具体可以包括:
循环读取所述独立元素集合中的每个元素,并根据所述独立元素的类型,将读取的元素添加到后缀表达式结果集中,其中,对于读取的当前元素,
若当前元素是操作数或自定义函数,则将所述当前元素添加到后缀表达式结果集中;
若当前元素是左括号运算符,则将所述当前元素压入栈中;
若当前元素是右括号运算符,且栈顶不是左括号运算符,则将栈内元素依次出栈直至栈顶是左括号运算符,将所述栈顶的左括号运算符和所述当前元素丢弃,根据出栈顺序将所出栈的元素保存到所述后缀表达式结果集中;
若当前元素不是左括号运算符或右括号运算符,且读取所述当前元素时栈为空,则将所述当前元素压入栈中;
若当前元素不是左括号运算符或右括号运算符,且读取所述当前元素时栈不为空,则在所述当前元素的优先级高于栈顶元素的优先级的情况下,将所述当前元素压入栈中;在所述当前元素的优先级不高于栈顶元素的优先级的情况下,将栈内元素出栈直至栈顶是左括号运算符或栈为空,并根据出栈顺序将所出栈的元素保存到所述后缀表达式结果集中,将所述当前元素压入栈中;
若在循环结束时,栈不为空,则将栈内元素依次出栈直至栈为空,并根据出栈顺序将所出栈的元素保存到所述后缀表达式结果集中。
在具体实施过程中,循环读取独立元素集合中的每一个元素(在本发明的实施例介绍中,元素即为独立元素),然后根据独立元素的类型,将读取的元素添加到后缀表达式结果集(在本发明的实施例介绍中,也简称作结果集)中。
图4是本发明一个实施例的将独立元素集合生成后缀表达式的实现流程示意图。如图4所示,将独立元素集合生成后缀表达式的实现流程主要包括如下的步骤:
1、定义一个栈和一个列表list。其中,栈用于存储读取的运算符,其具有先进后出、后进先出的特性,List用于存储后缀表达式的结果集;
2、判断独立元素集合中是否还有未读取的元素,若是,则执行步骤3,否则,结束循环,执行步骤13;
3、按照独立元素集合中独立元素的顺序,从独立元素集合中读取一个元素,执行步骤4;
4、判断读取的当前元素是否是运算符,若是,则执行步骤5,否则,当前元素即为操作数或者自定义函数,直接将当前元素添加到结果集中,然后执行步骤2;
5、判断当前元素是否是左括号,若是,则将当前元素压入栈中,然后执行步骤2,否则执行步骤6;
6、判断当前元素是否是右括号,若是,则执行步骤7,否则执行步骤10;
7、判断栈顶是否是左括号,若是,则执行步骤8,否则执行步骤9;
8、将栈顶的左括号和当前元素丢弃,然后执行步骤2;
9、将栈内元素依次出栈直至栈顶是左括号,将栈顶的左括号和当前元素丢弃,根据出栈顺序将所出栈的元素保存到结果集中,然后执行步骤2;
10、判断当前栈是否为空(栈为空即为栈内没有保存数据),若是,则将当前元素压入栈中,然后执行步骤2,否则执行步骤11;
11、判断当前元素的优先级是否高于栈顶元素的优先级,若是,则将当前元素压入栈中,然后执行步骤2,否则执行步骤12;
12、将栈内元素出栈直至栈顶元素是左括号或栈为空,并根据出栈顺序将所出栈的元素保存到结果集中,将当前元素压入栈中,然后执行步骤2;
13、判断当前栈是否为空,若是,则生成后缀表达式的流程结束,返回存储后缀表达式的结果集;否则执行步骤14;
14、将栈内元素出栈直至栈为空,并根据出栈顺序将所出栈的元素保存到结果集中,返回存储后缀表达式的结果集。
根据本发明的实施例,根据图4所示的将独立元素集合生成后缀表达式的实现流程对独立元素集合(独立元素之间以逗号分隔)“(,user.level,+,dynamicLevel(user),>,6,&&,user.age,>=,25,),||,(,user.code,==,'superAdmin',),||,adminCheck(user)”进行处理,生成的后缀表达式结果集(独立元素之间以逗号分隔)为:“user.level,dynamicLevel(user),+,6,>,user.age,25,>=,&&,user.code,'superAdmin',==,||,adminCheck(user),||”。
根据本发明的技术方案,在将独立元素集合转换成后缀表达式之后,即可根据权限验证请求中包括的参数信息来计算该后缀表达式,以对访问条件表达式进行计算,得到权限验证结果,实现对用户进行权限验证。
根据本发明的一个实施例,根据所述参数信息计算所述后缀表达式以对所述访问条件表达式进行计算,具体可以包括:循环读取所述后缀表达式的每个元素,并进行如下操作,直至所有元素均被读取:若当前元素不是运算符,则将所述当前元素压入栈中;若当前元素是运算符,则从栈中依次出栈两个元素作为两个运算参数;根据所述运算符和所述两个运算参数进行计算,并将计算结果压入栈中。
其中,在根据所述运算符和所述两个运算参数进行计算之前,还需要对出栈的元素进行判断,若出栈的元素为常量,则可直接使用出栈的元素作为运算参数来进行后续计算,否则,若出栈的元素为自定义函数或者变量,则需要进行处理以将出栈的元素转换为常量进行后续计算。
在本发明的一个实施例中,若出栈的元素为自定义函数,则对所述自定义函数进行拆分得到自定义函数名和所述自定义函数的参数名;根据所述自定义函数名获取所述自定义函数表达式,根据所述自定义函数的参数名获取所述自定义函数的参数值,其中,若所述自定义函数的参数不是常量,则从所述参数信息中查找所述自定义函数的参数名对应的参数值作为所述自定义函数的参数值;根据所述自定义函数表达式和所述自定义函数的参数值进行计算,将计算结果作为所述自定义函数对应的运算参数。
在本发明的另一个实施例中,若出栈的元素为变量,则根据拆分符对所述变量进行拆分,得到要访问资源的对象标识和参数名;通过反射的方式,从所述参数信息中查找与所述对象标识和所述参数名相对应的参数值,作为所述变量对应的运算参数。
图5是本发明一个实施例的后缀表达式的计算过程示意图。如图5所示,在本发明的实施例中,后缀表达式的计算过程主要包括以下步骤:
1、定义一个栈,用于存储操作数和自定义函数;
2、判断后缀表达式的结果集中是否还有未读取的元素,若是,则执行步骤3,否则,结束循环,执行步骤13;
3、按照后缀表达式的结果集中元素的顺序,从结果集中读取一个元素,执行步骤4;
4、判断读取的当前元素是否是运算符,若是,则执行步骤5,否则将当前元素压入栈中,然后执行步骤2;
5、从栈中依次出栈两个元素,对每个出栈的元素,分别执行步骤6;
6、判断出栈元素是否为常量(例如:一个数25,或一个字符串常量'superAdmin',等),若是,则将出栈元素作为运算参数,执行步骤12;否则,执行步骤7;
7、判断出栈元素是否为自定义函数,若是,则执行步骤8,否则,出栈元素为变量,执行步骤11;
8、对自定义函数进行拆分得到自定义函数名和自定义函数的参数名,例如:对自定义函数dynamicLevel(user),其自定义函数名为dynamicLevel,参数名为user。然后,根据自定义函数名获取自定义函数表达式,根据参数名判断参数是否为常量,若是,则执行步骤9,否则执行步骤10;
9、参数名即为参数值,根据自定义函数表达式和参数值计算函数值,并将函数值作为自定义函数对应的运算参数,执行步骤12;
10、根据参数名从权限验证请求包括的参数信息中获取参数值,根据自定义函数表达式和参数值计算函数值,并将函数值作为自定义函数对应的运算参数,执行步骤12;
11、根据拆分符对变量进行拆分,得到要访问资源的对象标识和参数名,例如:变量user.level,以拆分符“.”来拆分这个变量,获取到两部分:对象标识user和参数名level,根据拆分得到的数据可以判断出,此变量是要读取user对象的level属性的值。然后,通过反射的方式,从权限验证请求包括的参数信息中查找与该对象标识和参数名相对应的参数值,作为变量对应的运算参数,执行步骤12;
12、根据运算符和两个运算参数进行计算,并将计算结果压入栈中,然后执行步骤2;
13、将栈中的计算结果出栈,作为后缀表达式的计算结果。
根据本发明的技术方案,后缀表达式的计算结果即为访问条件表达式的计算结果,该计算结果就是允许或不允许访问资源。之后,即可将计算结果返回给调用权限验证***的业务***。
图6是根据本发明实施例的访问权限的验证装置的主要模块示意图。如图6所示,本发明实施例的访问权限的验证装置600主要包括请求获取模块601、表达式获取模块602和表达式计算模块603。
请求获取模块601,用于获取权限验证请求,所述权限验证请求包括待访问的资源标识和参数信息;
表达式获取模块602,用于根据所述资源标识获取资源对应的访问条件表达式,所述访问条件表达式是根据资源的权限验证配置信息生成的,所述权限验证配置信息包括待验证的参数、每个参数的验证规则,以及不同参数之间的逻辑关系;
表达式计算模块603,用于使用表达式计算工具,根据所述参数信息对所述访问条件表达式进行计算,得到权限验证结果。
根据本发明的一个实施例,所述参数的验证规则包括基于自定义函数实现的验证规则。
根据本发明的另一个实施例,所述不同参数之间的逻辑关系基于具有不同优先级的运算符来进行表示。
根据本发明的又一个实施例,表达式计算模块603还可以用于:根据预定义的独立元素的类型,对所述访问条件表达式进行拆分得到独立元素集合;根据所述独立元素的类型,将所述独立元素集合转换成后缀表达式;根据所述参数信息计算所述后缀表达式以对所述访问条件表达式进行计算。
根据本发明的又一个实施例,所述独立元素的类型包括运算符、自定义函数和操作数,表达式计算模块603在根据预定义的独立元素的类型,对所述访问条件表达式进行拆分得到独立元素集合时,还可以用于:循环读取所述访问条件表达式的每个字符,并根据预定义的独立元素的类型,判断单个字符或者字符串所属的独立元素的类型,并根据判断结果确定独立元素集合,其中,对于读取的当前字符,若当前字符不是运算符,则将所述当前字符存储到预先建立的字符串变量中;若当前字符是运算符,且不是左括号运算符,则判断所述当前字符与预读取的下一个字符是否组合成一个新的运算符;若是,则将所述当前字符与所述下一个字符作为一个运算符,添加到独立元素集合中,并将所述字符串变量中存储的数据作为一个独立元素添加到所述独立元素集合中;否则,将所述当前字符作为一个运算符添加到独立元素集合中,并将所述字符串变量中存储的数据作为一个独立元素添加到所述独立元素集合中;若当前字符是左括号运算符,则判断所述字符串变量中是否存储有数据;若是,则将所述当前字符与所述字符串变量中存储的数据作为自定义函数的左半部分,并循环读取下一个字符直至读取到右括号运算符,将读取的字符作为自定义函数的右半部分,将所述自定义函数的左半部分和右半部分组合为一个自定义函数,添加到所述独立元素集合中;否则,将所述当前字符作为一个运算符添加到所述独立元素集合中;若在循环结束时,所述字符串变量中仍存储有数据,则将所述字符串变量中存储的数据作为一个独立元素添加到所述独立元素集合中。
根据本发明的又一个实施例,表达式计算模块603在根据所述独立元素的类型,将所述独立元素集合转换成后缀表达式时,还可以用于:循环读取所述独立元素集合中的每个元素,并根据所述独立元素的类型,将读取的元素添加到后缀表达式结果集中,其中,对于读取的当前元素,若当前元素是操作数或自定义函数,则将所述当前元素添加到后缀表达式结果集中;若当前元素是左括号运算符,则将所述当前元素压入栈中;若当前元素是右括号运算符,且栈顶不是左括号运算符,则将栈内元素依次出栈直至栈顶是左括号运算符,将所述栈顶的左括号运算符和所述当前元素丢弃,根据出栈顺序将所出栈的元素保存到所述后缀表达式结果集中;若当前元素不是左括号运算符或右括号运算符,且读取所述当前元素时栈为空,则将所述当前元素压入栈中;若当前元素不是左括号运算符或右括号运算符,且读取所述当前元素时栈不为空,则在所述当前元素的优先级高于栈顶元素的优先级的情况下,将所述当前元素压入栈中;在所述当前元素的优先级不高于栈顶元素的优先级的情况下,将栈内元素出栈直至栈顶是左括号运算符或栈为空,并根据出栈顺序将所出栈的元素保存到所述后缀表达式结果集中,将所述当前元素压入栈中;若在循环结束时,栈不为空,则将栈内元素依次出栈直至栈为空,并根据出栈顺序将所出栈的元素保存到所述后缀表达式结果集中。
根据本发明的又一个实施例,表达式计算模块603在根据所述参数信息计算所述后缀表达式以对所述访问条件表达式进行计算时,还可以用于:循环读取所述后缀表达式的每个元素,并进行如下操作,直至所有元素均被读取:若当前元素不是运算符,则将所述当前元素压入栈中;若当前元素是运算符,则从栈中依次出栈两个元素作为两个运算参数;根据所述运算符和所述两个运算参数进行计算,并将计算结果压入栈中。
根据本发明的又一个实施例,表达式计算模块603在根据所述运算符和所述两个运算参数进行计算之前,还可以用于:若出栈的元素为自定义函数,则对所述自定义函数进行拆分得到自定义函数名和所述自定义函数的参数名;根据所述自定义函数名获取所述自定义函数表达式,根据所述自定义函数的参数名获取所述自定义函数的参数值,其中,若所述自定义函数的参数不是常量,则从所述参数信息中查找所述自定义函数的参数名对应的参数值作为所述自定义函数的参数值;根据所述自定义函数表达式和所述自定义函数的参数值进行计算,将计算结果作为所述自定义函数对应的运算参数。
根据本发明的又一个实施例,表达式计算模块603在根据所述运算符和所述两个运算参数进行计算之前,还可以用于:若出栈的元素为变量,则根据拆分符对所述变量进行拆分,得到要访问资源的对象标识和参数名;通过反射的方式,从所述参数信息中查找与所述对象标识和所述参数名相对应的参数值,作为所述变量对应的运算参数。
根据本发明实施例的技术方案,通过获取权限验证请求,权限验证请求包括待访问的资源标识和参数信息;根据资源标识获取资源对应的访问条件表达式,访问条件表达式是根据资源的权限验证配置信息生成的,权限验证配置信息包括待验证的参数、每个参数的验证规则,以及不同参数之间的逻辑关系;使用表达式计算工具,根据参数信息对访问条件表达式进行计算,得到权限验证结果的技术方案,可以根据资源的权限验证配置信息生成支持多属性、复杂运算逻辑的表达式,并通过对复杂表达式的计算来进行权限验证,无需针对业务***进行定制化开发,节约了维护成本,从而解决了现有的权限验证方式维护成本高且不够灵活,以及不支持对多个属性的复杂运算来进行权限验证的技术问题。同时,本发明的权限验证方法还支持自定义函数的设置,通过自定义函数来实现更灵活地对权限进行验证。
图7示出了可以应用本发明实施例的访问权限的验证方法或访问权限的验证装置的示例性***架构700。
如图7所示,***架构700可以包括终端设备701、702、703,网络704和服务器705。网络704用以在终端设备701、702、703和服务器705之间提供通信链路的介质。网络704可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备701、702、703通过网络704与服务器705交互,以接收或发送消息等。终端设备701、702、703上可以安装有各种通讯客户端应用,例如资源访问类应用、网页浏览器应用、搜索类应用、即时通信工具、社交平台软件等(仅为示例)。
终端设备701、702、703可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器705可以是提供各种服务的服务器,例如对用户利用终端设备701、702、703所发来的访问权限验证网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的资源访问权限验证请求等数据进行获取权限验证请求包括的待访问的资源标识和参数信息;根据所述资源标识获取资源对应的访问条件表达式,所述访问条件表达式是根据资源的权限验证配置信息生成的,所述权限验证配置信息包括待验证的参数、每个参数的验证规则,以及不同参数之间的逻辑关系;使用表达式计算工具,根据所述参数信息对所述访问条件表达式进行计算等处理,并将处理结果(例如权限验证结果、授权信息--仅为示例)反馈给终端设备。
需要说明的是,本发明实施例所提供的访问权限的验证方法一般由服务器705执行,相应地,访问权限的验证装置一般设置于服务器705中。
应该理解,图7中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图8,其示出了适于用来实现本发明实施例的终端设备或服务器的计算机***800的结构示意图。图8示出的终端设备或服务器仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图8所示,计算机***800包括中央处理单元(CPU)801,其可以根据存储在只读存储器(ROM)802中的程序或者从存储部分808加载到随机访问存储器(RAM)803中的程序而执行各种适当的动作和处理。在RAM 803中,还存储有***800操作所需的各种程序和数据。CPU 801、ROM 802以及RAM 803通过总线804彼此相连。输入/输出(I/O)接口805也连接至总线804。
以下部件连接至I/O接口805:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至I/O接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入存储部分808。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被中央处理单元(CPU)801执行时,执行本发明的***中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的单元或模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元或模块也可以设置在处理器中,例如,可以描述为:一种处理器包括请求获取模块、表达式获取模块和表达式计算模块。其中,这些单元或模块的名称在某种情况下并不构成对该单元或模块本身的限定,例如,请求获取模块还可以被描述为“用于获取权限验证请求的模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:获取权限验证请求,所述权限验证请求包括待访问的资源标识和参数信息;根据所述资源标识获取资源对应的访问条件表达式,所述访问条件表达式是根据资源的权限验证配置信息生成的,所述权限验证配置信息包括待验证的参数、每个参数的验证规则,以及不同参数之间的逻辑关系;使用表达式计算工具,根据所述参数信息对所述访问条件表达式进行计算,得到权限验证结果。
根据本发明实施例的技术方案,通过获取权限验证请求,权限验证请求包括待访问的资源标识和参数信息;根据资源标识获取资源对应的访问条件表达式,访问条件表达式是根据资源的权限验证配置信息生成的,权限验证配置信息包括待验证的参数、每个参数的验证规则,以及不同参数之间的逻辑关系;使用表达式计算工具,根据参数信息对访问条件表达式进行计算,得到权限验证结果的技术方案,可以根据资源的权限验证配置信息生成支持多属性、复杂运算逻辑的表达式,并通过对复杂表达式的计算来进行权限验证,无需针对业务***进行定制化开发,节约了维护成本,从而解决了现有的权限验证方式维护成本高且不够灵活,以及不支持对多个属性的复杂运算来进行权限验证的技术问题。同时,本发明的权限验证方法还支持自定义函数的设置,通过自定义函数来实现更灵活地对权限进行验证。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (12)

1.一种访问权限的验证方法,其特征在于,包括:
获取权限验证请求,所述权限验证请求包括待访问的资源标识和参数信息;
根据所述资源标识获取资源对应的访问条件表达式,所述访问条件表达式是根据资源的权限验证配置信息生成的,所述权限验证配置信息包括待验证的参数、每个参数的验证规则,以及不同参数之间的逻辑关系;
使用表达式计算工具,根据所述参数信息对所述访问条件表达式进行计算,得到权限验证结果。
2.根据权利要求1所述的方法,其特征在于,所述参数的验证规则包括基于自定义函数实现的验证规则。
3.根据权利要求1所述的方法,其特征在于,所述不同参数之间的逻辑关系基于具有不同优先级的运算符来进行表示。
4.根据权利要求1所述的方法,其特征在于,使用表达式计算工具,根据所述参数信息对所述访问条件表达式进行计算,包括:
根据预定义的独立元素的类型,对所述访问条件表达式进行拆分得到独立元素集合;
根据所述独立元素的类型,将所述独立元素集合转换成后缀表达式;
根据所述参数信息计算所述后缀表达式以对所述访问条件表达式进行计算。
5.根据权利要求4所述的方法,其特征在于,所述独立元素的类型包括运算符、自定义函数和操作数,
根据预定义的独立元素的类型,对所述访问条件表达式进行拆分得到独立元素集合,包括:
循环读取所述访问条件表达式的每个字符,并根据预定义的独立元素的类型,判断单个字符或者字符串所属的独立元素的类型,并根据判断结果确定独立元素集合,其中,对于读取的当前字符,
若当前字符不是运算符,则将所述当前字符存储到预先建立的字符串变量中;
若当前字符是运算符,且不是左括号运算符,则判断所述当前字符与预读取的下一个字符是否组合成一个新的运算符;若是,则将所述当前字符与所述下一个字符作为一个运算符,添加到独立元素集合中,并将所述字符串变量中存储的数据作为一个独立元素添加到所述独立元素集合中;否则,将所述当前字符作为一个运算符添加到独立元素集合中,并将所述字符串变量中存储的数据作为一个独立元素添加到所述独立元素集合中;
若当前字符是左括号运算符,则判断所述字符串变量中是否存储有数据;若是,则将所述当前字符与所述字符串变量中存储的数据作为自定义函数的左半部分,并循环读取下一个字符直至读取到右括号运算符,将读取的字符作为自定义函数的右半部分,将所述自定义函数的左半部分和右半部分组合为一个自定义函数,添加到所述独立元素集合中;否则,将所述当前字符作为一个运算符添加到所述独立元素集合中;
若在循环结束时,所述字符串变量中仍存储有数据,则将所述字符串变量中存储的数据作为一个独立元素添加到所述独立元素集合中。
6.根据权利要求5所述的方法,其特征在于,根据所述独立元素的类型,将所述独立元素集合转换成后缀表达式,包括:
循环读取所述独立元素集合中的每个元素,并根据所述独立元素的类型,将读取的元素添加到后缀表达式结果集中,其中,对于读取的当前元素,
若当前元素是操作数或自定义函数,则将所述当前元素添加到后缀表达式结果集中;
若当前元素是左括号运算符,则将所述当前元素压入栈中;
若当前元素是右括号运算符,且栈顶不是左括号运算符,则将栈内元素依次出栈直至栈顶是左括号运算符,将所述栈顶的左括号运算符和所述当前元素丢弃,根据出栈顺序将所出栈的元素保存到所述后缀表达式结果集中;
若当前元素不是左括号运算符或右括号运算符,且读取所述当前元素时栈为空,则将所述当前元素压入栈中;
若当前元素不是左括号运算符或右括号运算符,且读取所述当前元素时栈不为空,则在所述当前元素的优先级高于栈顶元素的优先级的情况下,将所述当前元素压入栈中;在所述当前元素的优先级不高于栈顶元素的优先级的情况下,将栈内元素出栈直至栈顶是左括号运算符或栈为空,并根据出栈顺序将所出栈的元素保存到所述后缀表达式结果集中,将所述当前元素压入栈中;
若在循环结束时,栈不为空,则将栈内元素依次出栈直至栈为空,并根据出栈顺序将所出栈的元素保存到所述后缀表达式结果集中。
7.根据权利要求6所述的方法,其特征在于,根据所述参数信息计算所述后缀表达式以对所述访问条件表达式进行计算,包括:
循环读取所述后缀表达式的每个元素,并进行如下操作,直至所有元素均被读取:
若当前元素不是运算符,则将所述当前元素压入栈中;
若当前元素是运算符,则从栈中依次出栈两个元素作为两个运算参数;
根据所述运算符和所述两个运算参数进行计算,并将计算结果压入栈中。
8.根据权利要求7所述的方法,其特征在于,根据所述运算符和所述两个运算参数进行计算之前,还包括:
若出栈的元素为自定义函数,则对所述自定义函数进行拆分得到自定义函数名和所述自定义函数的参数名;
根据所述自定义函数名获取所述自定义函数表达式,根据所述自定义函数的参数名获取所述自定义函数的参数值,其中,若所述自定义函数的参数不是常量,则从所述参数信息中查找所述自定义函数的参数名对应的参数值作为所述自定义函数的参数值;
根据所述自定义函数表达式和所述自定义函数的参数值进行计算,将计算结果作为所述自定义函数对应的运算参数。
9.根据权利要求7所述的方法,其特征在于,根据所述运算符和所述两个运算参数进行计算之前,还包括:
若出栈的元素为变量,则根据拆分符对所述变量进行拆分,得到要访问资源的对象标识和参数名;
通过反射的方式,从所述参数信息中查找与所述对象标识和所述参数名相对应的参数值,作为所述变量对应的运算参数。
10.一种访问权限的验证装置,其特征在于,包括:
请求获取模块,用于获取权限验证请求,所述权限验证请求包括待访问的资源标识和参数信息;
表达式获取模块,用于根据所述资源标识获取资源对应的访问条件表达式,所述访问条件表达式是根据资源的权限验证配置信息生成的,所述权限验证配置信息包括待验证的参数、每个参数的验证规则,以及不同参数之间的逻辑关系;
表达式计算模块,用于使用表达式计算工具,根据所述参数信息对所述访问条件表达式进行计算,得到权限验证结果。
11.一种访问权限的验证电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-9中任一所述的方法。
12.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-9中任一所述的方法。
CN202210782604.0A 2022-07-05 2022-07-05 访问权限的验证方法和装置 Pending CN115168831A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210782604.0A CN115168831A (zh) 2022-07-05 2022-07-05 访问权限的验证方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210782604.0A CN115168831A (zh) 2022-07-05 2022-07-05 访问权限的验证方法和装置

Publications (1)

Publication Number Publication Date
CN115168831A true CN115168831A (zh) 2022-10-11

Family

ID=83491714

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210782604.0A Pending CN115168831A (zh) 2022-07-05 2022-07-05 访问权限的验证方法和装置

Country Status (1)

Country Link
CN (1) CN115168831A (zh)

Similar Documents

Publication Publication Date Title
CN109844727B (zh) 用于管理应用程序配置和相关联凭证的技术
CN109901987B (zh) 一种生成测试数据的方法和装置
CN113076153B (zh) 一种接口调用方法和装置
EP4350556A1 (en) Information verification method and apparatus
CN114979295B (zh) 一种网关管理的方法和装置
CN113037787A (zh) 一种数据处理方法和装置
CN112084042A (zh) 一种消息处理的方法和装置
CN113778499B (zh) 发布服务的方法、装置、设备和计算机可读介质
CN113572763A (zh) 数据处理方法、装置、电子设备及存储介质
CN113779004A (zh) 一种数据校验的方法和装置
CN112052152A (zh) 一种模拟测试的方法和装置
CN115168831A (zh) 访问权限的验证方法和装置
CN113742235A (zh) 一种校验代码的方法和装置
CN113448652A (zh) 一种请求处理方法和装置
CN111984612A (zh) 一种共享文件的方法、装置和***
CN109213815B (zh) 控制执行次数的方法、装置、服务器终端以及可读介质
CN113761566A (zh) 一种数据处理方法和装置
CN115037507B (zh) 用户访问管理的方法、装置和***
CN113312053A (zh) 一种数据处理的方法和装置
CN111209014A (zh) 一种参数校验的方法和装置
CN113329011B (zh) 一种安全访问控制方法和装置
CN113760886B (zh) 提供数据服务的方法、装置、设备和计算机可读介质
CN113282274B (zh) 一种数据处理方法和装置
US12032647B2 (en) Tenant network for rewriting of code included in a web page
CN116800439A (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