前端渲染场景下的权限控制方法、装置、设备及存储介质
文献发布时间:2023-06-19 09:35:27
技术领域
本申请涉及前端技术领域,特别涉及一种前端渲染场景下的权限控制方法、装置、设备及存储介质。
背景技术
在前端技术中,权限控制是向不同的用户提供差异化的访问服务的一种常用方法。
在相关技术中,对页面、页面组件或者页面组件中的元素等页面对象的权限控制,通常是通过与前端框架的内置判断逻辑单元进行绑定来实现的。具体的,当需要判断某一页面对象是否显示时,前端框架可以调用内置判断逻辑单元来判断该页面对象在当前登录状态下是否可见。
由于前端框架中的内置判断逻辑单元是一个通用单元,该内置判断逻辑单元除了判断页面对象在当前登录状态下是否可见之外,在必要的情况下,还需要判断该页面对象是否满足其它显示条件。例如,某个需要进行权限控制的页面对象是可以由用户手动隐藏的对象,前端框架在显示该页面对象所在的页面或者页面组件时,可以调用内置判断逻辑单元,该内置判断逻辑单元判断该页面对象在当前登录状态下是否可见,并且,还判断该页面对象是否处于被隐藏状态,如果判断结果为该页面对象在当前登录状态下可见,并且不处于被隐藏状态,则前端框架对该页面对象进行展示。
其中,上述内置逻辑判断单元只能实现页面对象的隐藏,不能实现其它权限控制,并且,相关技术中的权限控制逻辑可能与其它判断逻辑绑定,当其它判断逻辑被触发时,无论是否需要权限控制(即使权限已经判定完成),都会触发权限控制逻辑,从而导致不必要的权限控制过程所带来的资源浪费,从而影响对页面对象的逻辑控制的效率。
发明内容
本申请实施例提供了一种前端渲染场景下的权限控制方法、装置、设备及存储介质,可以扩展对文章的场景进行营造的方式,提高对文字描述的场景的表达效果,该技术方案如下:
一方面,提供了一种前端渲染场景下的权限控制方法,所述方法包括:
通过前端框架获取页面对象的权限参数,所述页面对象是前端框架当前渲染的页面中的页面对象,所述权限参数用于指示渲染所述页面对象所需的用户权限;
通过所述前端框架将所述权限参数传入权限控制单元,所述权限控制单元独立于其它逻辑控制单元,所述其它逻辑控制单元是具有权限控制之外的逻辑控制功能的软件单元;
通过所述权限控制单元,根据所述权限参数获取所述页面对象的权限控制信息,所述权限控制信息用于指示所述页面对象在当前登录状态下是否可见;
通过所述权限控制单元,根据所述权限控制信息对所述页面对象进行权限控制。
另一方面,提供了一种前端渲染场景下的权限控制装置,所述装置包括:
第一权限参数获取模块,用于通过前端框架获取页面对象的权限参数,所述页面对象是前端框架当前渲染的页面中的页面对象,所述权限参数用于指示渲染所述页面对象所需的用户权限;
参数传入模块,用于通过所述前端框架将所述权限参数传入权限控制单元,所述权限控制单元独立于其它逻辑控制单元,所述其它逻辑控制单元是具有权限控制之外的逻辑控制功能的软件单元;
权限控制信息获取模块,用于通过所述权限控制单元,根据所述权限参数获取所述页面对象的权限控制信息,所述权限控制信息用于指示所述页面对象在当前登录状态下是否可见;
权限控制模块,用于通过所述权限控制单元,根据所述权限控制信息对所述页面对象进行权限控制。
可选的,所述权限控制信息获取模块,用于,
通过所述权限控制单元将所述权限参数与权限控制数据进行比对,所述权限控制数据中包含当前登录状态下所具有的各项权限参数;
根据所述权限参数与所述权限控制数据之间的比对结果获取所述权限控制信息。
可选的,在根据所述权限参数与所述权限控制数据之间的比对结果获取所述权限控制信息时,所述权限控制信息获取模块,用于,
若所述比对结果为所述权限参数不存在于所述权限控制数据中,则获取第一控制信息,所述第一控制信息用于指示所述页面对象在当前登录状态下不可见。
可选的,所述装置还包括:
第二权限参数获取模块,用于在所述权限控制信息获取模块通过所述权限控制单元将所述权限参数与权限控制数据进行比对之前,从服务器获取当前登录状态下所具有的所述各项权限参数;
权限控制数据生成模块,用于根据所述各项权限参数生成所述权限控制数据。
可选的,所述权限控制模块,用于当所述页面对象是所述页面,且所述权限控制信息指示所述页面对象在当前登录状态下不可见时,通过所述权限控制单元,控制向指定页面跳转。
可选的,所述权限控制模块,用于当所述页面对象是所述页面中的页面组件或者所述页面组件中的元素,且所述权限控制信息指示所述页面对象在当前登录状态下不可见时,通过所述权限控制单元将所述页面对象的显示属性设置为隐藏。
可选的,所述参数传入模块,用于通过所述前端框架调用指定钩子函数,将所述权限参数传入所述权限控制单元;所述指定钩子函数是针对所述页面对象单次可执行的钩子函数。
另一方面,提供了一种计算机设备,所述计算机设备包含处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上所述的前端渲染场景下的权限控制方法。
另一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上所述的前端渲染场景下的权限控制方法。
本申请提供的技术方案可以包括以下有益效果:
通过将前端框架获取的页面对象的权限参数传入独立于其他逻辑控制单元的权限控制单元,由权限控制单元根据权限参数获取页面对象的权限控制信息,并根据权限控制信息实现对页面对象的权限控制,使得用于进行权限控制的逻辑单元与其他逻辑控制单元解耦,减少了在执行其他逻辑控制单元时对权限控制单元的重复执行,避免了不必要的权限控制过程所带来的资源浪费,从而提高页面对象的展示效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1是本申请各个实施例涉及的一种前端渲染场景下的权限控制系统的系统架构图;
图2是根据一示例性实施例示出的一种前端渲染场景下的权限控制方法的流程图;
图3是图2所示实施例涉及的一种通过Web应用进行权限控制的示意图;
图4是根据一示例性实施例示出的一种前端渲染场景下的权限控制方法的流程图;
图5是图4所示实施例涉及的权限控制流程的示意图;
图6是根据一示例性实施例示出的前端渲染场景下的权限控制装置的结构方框图;
图7是根据一示例性实施例示出的一种计算机设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
应当理解的是,在本文中提及的“若干个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
本申请提供一种前端渲染场景下进行权限控制方案,可以有效的避免不必要的权限控制步骤,从而节约终端的处理资源,提高前端渲染场景下对页面对象的逻辑控制的效率。为了便于理解,下面对本申请涉及的几个名词进行解释。
1)前端框架
前端框架是指用于简化网页设计的框架。而本申请中涉及的前端框架可以是具有自定义指令功能的前端框架,比如,Vue,Angular等等,这些框架封装了一些基本的功能,比如超文本标记语言(Hyper Text Markup Language,HTML)文档操作以及各种控件(按钮,表单等等)。使用前段框架可以降低界面开发周期,提高界面的美观性。
2)页面对象
在本申请中,页面对象是指页面中可以由前端框架单独进行控制的,各种粒度的对象,比如,在一个页面中,该页面本身可以作为一个页面对象,该页面中包含的每个页面组件也可以单独作为一个页面对象,每个页面组件中包含的页面元素也可以单独作为一个页面对象。
3)权限控制
在前端技术领域,权限控制是指控制用户可以访问哪些页面对象的方法,也就是判断页面对象在当前登录状态下是否可见。其中,权限控制大致分为垂直维度和水平维度这两个维度。
其中,垂直维度的权限控制,是指控制用户可以访问哪些url的权限,也就是控制某个页面在当前登录状态下是否可见。
而水平维度的权限控制,是指控制用户访问特定url时,获取哪些数据的权限(比如,普通用户、管理员、超级管理员访问同一url时,获取的数据是不同的),也就是控制某个页面中的页面组件或者页面组件中的元素在当前登录状态下是否可见。
请参考图1,其示出了本申请各个实施例涉及的一种前端渲染场景下的权限控制系统的系统构成图。如图1所示,该系统包括服务器120、数据库140以及若干个用户终端160。
服务器120是一台服务器,或者由若干台服务器,或者是一个虚拟化平台,或者是一个云计算服务中心。
服务器120可以由一个或多个功能单元组成。可选的,如图1所示,服务器120可以包括:权限管理单元120a、页面数据管理单元120b等等。
其中,权限管理单元120a用于生成、更新和维护各个用户账号对应的权限,并向各个用户终端160提供该用户终端160在当前登录状态下所具有的权限等信息。
页面数据管理单元120b用于管理开发人员开发的页面中的页面数据,接受用户终端160的请求,并将用户终端160请求的页面数据发送给用户终端160,以便用户终端160进行展示。
上述数据库140可以是Redis数据库,或者,也可以是其它类型数据库。其中,数据库140用于存储各类数据,比如,各个用户账号、各个用户账号所具有的权限、以及各个页面的页面数据等等。
用户终端160可以是具有网络连接功能以及页面展示功能的终端设备,比如,用户终端160可以是手机、平板电脑、电子书阅读器、智能眼镜、智能手表、以及车载终端等等。
比如,用户终端160中可以安装有支持前端框架开发的浏览器或者其它网络(Web)应用(比如Web客户端等)。
用户终端160与服务器120之间通过通信网络相连。可选的,该通信网络是有线网络或无线网络。
可选的,该系统还可以包括管理设备(图1未示出),该管理设备与服务器120之间通过通信网络相连。可选的,通信网络是有线网络或无线网络。
可选的,上述的无线网络或有线网络使用标准通信技术和/或协议。网络通常为因特网、但也可以是任何网络,包括但不限于局域网(Local Area Network,LAN)、城域网(Metropolitan Area Network,MAN)、广域网(Wide Area Network,WAN)、移动、有线或者无线网络、专用网络或者虚拟专用网络的任何组合)。在一些实施例中,使用包括超文本标记语言(Hyper Text Mark-up Language,HTML)、可扩展标记语言(Extensible MarkupLanguage,XML)等的技术和/或格式来代表通过网络交换的数据。此外还可以使用诸如安全套接字层(Secure Socket Layer,SSL)、传输层安全(Transport Layer Security,TLS)、虚拟专用网络(Virtual Private Network,VPN)、网际协议安全(Internet ProtocolSecurity,IPsec)等常规加密技术来加密所有或者一些链路。在另一些实施例中,还可以使用定制和/或专用数据通信技术取代或者补充上述数据通信技术。
图2是根据一示例性实施例示出的一种前端渲染场景下的权限控制方法的流程图。该权限控制方法可以应用于计算机设备中,以实现在前端渲染场景下对页面中的页面对象进行权限控制。其中,上述计算机设备可以是图1所示系统中的用户终端160。如图2所示,该前端渲染场景下的权限控制方法可以包括以下步骤:
步骤210,通过前端框架获取页面对象的权限参数,该页面对象是前端框架当前渲染的页面中的页面对象,该权限参数用于指示渲染该页面对象所需的用户权限。
在本申请实施例中,页面对象可以是当前页面本身,或者,页面对象可以是当前页面中的某个页面组件,或者,上述页面对象也可以是当前页面中某个页面组件中的元素。
其中,上述页面组件是对一个或者多个元素进行封装的容器。比如,该页面组件可以是页面中的一个输入框或者下拉框等。可选的,当上述页面是网页时,页面组件也可以成为网页组件或者Web组件。
上述元素是页面的基本组成部分,其通常是一个以图形化的方式显示在屏幕上并能与用户交互的对象,例如,上述元素可以是输入框中的一个按钮,或者是下拉框中的一个标签等。
步骤220,通过该前端框架将所述权限参数传入权限控制单元,该权限控制单元独立于其它逻辑控制单元,该其它逻辑控制单元是具有权限控制之外的逻辑控制功能的软件单元。
在本申请实施例中,上述前端框架可以是具有自定义指令功能的前端框架,而上述权限控制单元是是由前端框架提供的自定义指令功能实现的。
其中,上述权限控制单元是区别于前端框架的内置判断单元的独立单元,该权限控制单元用于对网页对象进行权限控制,并且,与网页对象的其它逻辑功能解耦。
也就是说,在本申请实施例中,权限控制单元与其它逻辑控制单元并不存在绑定关系,当前端框架触发其它逻辑控制单元对某个页面对象进行逻辑控制时,并不一定会触发权限控制单元对同一页面对象进行权限控制,相应的,当前端框架触发权限控制单元对某个页面对象进行权限控制时,也并不一定会触发其它逻辑控制单元对同一页面对象进行其它逻辑控制。
步骤230,通过该权限控制单元,根据该权限参数获取该页面对象的权限控制信息,该权限控制信息用于指示该页面对象在当前登录状态下是否可见。
在本申请实施例中,当页面对象是页面本身时,该页面对象在当前登录状态下是否可见,可以是指当前登录状态下是否有权限访问该页面;当页面对象是页面中的页面组件,或者页面组件中元素时,上述页面对象在当前登录状态下是否可见,可以是指当前登录状态下是否有权限看到该页面组件或者页面组件中的元素。
步骤240,通过该权限控制单元,根据该权限控制信息对该页面对象进行权限控制。
在一种可能的实现方式中,当上述页面对象是页面时,若该权限控制信息指示该页面对象在当前登陆状态下不可见,则可以通过权限控制单元控制向指定页面跳转;或者,当上述页面对象是页面组件或者页面组件中的元素时,若该权限控制信息指示在当前登陆状态下不可见,则可以通过权限控制单元将该页面组件或者页面组件中的对象隐藏。
例如,请参考图3,其示出了本申请实施例涉及的一种通过Web应用进行权限控制的示意图。如图3所示,Web应用基于前端框架进行开发,在开发过程中,开发人员基于前端框架的自定义指令功能开发一个专用于权限控制的权限控制单元。该Web应用运行在用户终端中时,在Web应用访问一个页面的过程中,当需要对该页面中的页面对象进行权限控制时,前端框架可以获取页面中的页面对象的权限参数(S31),然后将权限参数输入至权限控制单元(S32),权限控制单元根据该页面对象的权限参数,确定该页面对象在当前登录状态下是否可见,并根据确定结果对该页面对象进行权限控制(S33)。
在上述图3所示的过程中,当除了权限控制之外,还需要对上述页面对象进行其它逻辑控制时,前端框架可以单独调用其它逻辑控制单元,执行对该页面对象的其它逻辑判断及控制过程,并且,上述调用过程并不触发权限控制单元执行对该页面对象的权限控制操作。
综上所述,本申请实施例中提供的在前端渲染的场景下的权限控制方法,通过将前端框架获取的页面对象的权限参数传入独立于其他逻辑控制单元的权限控制单元,由权限控制单元根据权限参数获取页面对象的权限控制信息,并根据权限控制信息实现对页面对象的权限控制,使得用于进行权限控制的逻辑单元与其他逻辑控制单元解耦,减少了在执行其他逻辑控制单元时对权限控制单元的重复执行,避免了不必要的权限控制过程所带来的资源浪费,从而提高页面对象的展示效率。
图4是根据一示例性实施例示出的一种前端渲染场景下的权限控制方法的流程图。该权限控制方法可以应用于计算机设备中,以实现在前端渲染场景下对页面中的页面对象进行权限控制。其中,上述计算机设备可以是图1所示系统中的用户终端160。如图4所示,该前端渲染场景下的权限控制方法可以包括以下步骤:
步骤410,通过前端框架获取页面对象的权限参数,该页面对象是前端框架当前渲染的页面中的页面对象,该权限参数用于指示渲染该页面对象所需的用户权限。
在一种可能的实现方式中,前端框架可以从页面对象对应的页面数据中提取该页面对象的权限参数。
比如,Web应用(比如浏览器或者其它基于前端框架开发的Web客户端)在访问一个页面时,可以从该页面对应的服务器(比如图1所示系统中的服务器120)中拉取该页面的页面数据,其中,该页面的页面数据由该页面的各个页面对象的页面数据构成,并且,当某个页面对象需要进行权限控制时,该页面对象的页面数据中会包含该页面对象的权限参数,即该页面对象对具有对应的权限参数的用户可见。相应的,Web应用中的前端框架在解析该页面中的某个需要进行权限控制的页面对象的页面数据时,可以从该也的页面对象的页面数据中提取出该页面对象的权限参数。
其中,上述页面对象包括页面、页面中的页面组件以及页面组件中的元素等各个粒度的对象,对于不同的页面对象,页面数据中携带的权限参数也可以是不同的。
例如,假设页面对象是某个页面A,其根组件为APP,自定义指令(即权限控制单元)名称为v-permission,PAGE_A_READ代表页面A所需的访问权限(即上述权限参数),那么只需要在页面A的根组件上添加以下自定义指令:
再例如,页面A内有一个按钮(button),对有权限的用户可见,而对没有权限的用户不可见,假设自定义指令名称为v-permission,BUTTON_READ代表能否显示这个button的权限,那么只需要在该button上添加以下自定义指令:,即可以触发前端框架在解析该button时,获取其中的权限参数,即上述自定义指令中的“BUTTON_READ”。
步骤420,通过该前端框架将该权限参数传入权限控制单元。
其中,该权限控制单元独立于其它逻辑控制单元,该其它逻辑控制单元是具有权限控制之外的逻辑控制功能的软件单元。
在一个实施例中,权限控制单元由开发人员基于前端框架的自定义指令功能开发得到,其可以专门用于实现对页面对象的权限判断即后续的控制过程,且该权限控制单元与其它逻辑控制单元解耦,比如,是否调用权限控制单元由前端框架根据业务需要来决定,与是否调用其它逻辑控制单元无关,从代码层面来说,权限控制逻辑的代码与其它逻辑控制的代码分离,同时,权限控制指令与其它逻辑控制指令也分离,从而提高了代码的可读性和可维护性。
此外,本申请实施例中,前端框架可以将页面对象的标识,以及该页面对象的权限参数传入权限控制单元,由权限控制单元进行后续的权限判断和权限控制。在此过程中,前端框架不需要向权限控制单元传递其它冗余数据,进一步提高代码的可读性和可维护性。
在本申请实施例中,在页面的一次展示过程中,由于当前登录状态通常是不会发生变化,相应的,在页面的本次展示过程中,无论页面对象的其它逻辑控制发生什么样的变化,该页面对象的逻辑控制结果通常都是不变的,也就是说,在页面的本次展示过程中,该页面对象的权限控制逻辑也只需要执行一次即可。
在一种可能的实现方式中,可以通过将一个页面对象的权限参数传入权限控制单元的过程与单次执行的钩子函数绑定,来实现页面对象的权限控制逻辑在页面的本次展示过程中的单次执行。也就是说,在本申请实施例中,前端框架可以通过调用指定的钩子函数,将页面对象的权限参数传入权限控制单元,并且该指定的钩子函数是针对当前页面对象单次可执行的函数。在当前页面的本次展示过程中,在经过一次调用之后,该指定的钩子函数不会被再次调用,也就是,前端框架在当前页面的本次展示过程中,在首次将页面对象的权限参数传入权限控制单元之后,无论该页面对象的其它业务逻辑发生什么样的变化,都不会再次向权限控制单元传入该页面对象的权限参数,从而实现在调用其他逻辑控制单元时,减少权限控制单元的重复调用。
例如,在一个可能的实现场景中,用户A打开一个网页,前端框架在接收到用户操作信息后,向服务器请求该网页的页面数据,服务器收到前端框架发送的请求后,将该网页的页面数据发送给前端框架,其中包含渲染当前页面对象所需的权限参数,包括页面、页面中的页面组件及组件内的元素等各个粒度的权限参数,前端框架获取到一个页面对象的权限参数后,通过调用该页面对象对应的指定的钩子函数,将渲染该页面对象所需的权限参数传入权限控制单元。由于指定的钩子函数是针对当前页面对象单次可执行的,也就是,在该网页的本次展示过程中,前端框架将所获取的页面对象的权限参数传入权限控制单元的过程也是单次执行的,即在执行针对该页面对象的其它逻辑控制过程时,不会再重复调用权限控制单元对该页面对象进行权限控制的步骤。
例如,对于Vue这个前端框架,自定义指令时只执行一次的钩子函数是bind函数和update函数,权限控制的判断逻辑可以写在这两个函数中,其中,bind钩子函数在文档对象模型(Document Object Model,DOM)元素被前端框架创建完成后但是未显示在页面中之前被调用,而update函数可以是在传给权限控制单元的参数发生了变化时被调用。
也就是说,上述在页面的本次展示过程中,对页面中的页面对象做单次可执行的权限控制的过程,可以是在该页面对象被展示之前执行,也就是说,在本申请实施例中,上述通过该前端框架将页面对象的权限参数传入权限控制单元的步骤,可以在前端框架创建该页面对象的DOM元素时或者创建该页面对象的DOM元素完成后,且在对该页面对象进行渲染展示之前执行。
比如,用户请求访问某个页面时,前端框架在解析该页面的页面数据,并创建该页面中的各个页面对象的DOM元素的过程中,若发现某个页面对象需要进行权限控制,则在对该页面对象进行渲染展示之前,将该页面对象的权限参数传入权限控制单元。并且,在本次将该页面对象的权限参数传入权限控制单元之后,对于相同的页面对象,在该页面的本次访问过程中,不会再将该页面对象的权限参数重复传入权限控制单元。
步骤430,通过权限控制单元将权限参数与权限控制数据进行比对,该权限控制数据中包含当前登录状态下所具有的各项权限参数。
在本申请实施例中,通过前端框架将页面对象的权参数传入权限控制单元后,终端还通过权限控制单元,将渲染该页面对象所需要的用户权限,与当前登录状态下所具有的用户权限进行比对。
其中,终端可以预先从服务器获取上述权限控制数据。比如,在一种可能的实现方式中,终端获取上述权限控制数据的过程可以如下:
S4301、通过权限请求单元从服务器获取当前登录状态下所具有的各项权限参数。
在一种可能的实现方式中,终端可以通过上述权限请求单元,从服务器请求获取当前登录状态所具有的各项权限参数。
其中,上述权限请求单元是终端中专门用于远程权限数据请求的程序单元。例如,当终端启动Web应用时,或者,当登录状态发生变化(比如登录账号或者退出登录)时,终端可以通过调用上述权限请求单元,向服务器发送权限参数获取请求,该权限参数获取请求中携带当前登录状态信息,比如,当前是否登录有用户账号,以及,当前登录的用户账号等等,服务器接收到该权限参数获取请求后,查询当前登录状态下所具有的各项权限参数,并将查询到的各项权限参数返回给终端。
在一种可能的实现方式中,当前登录状态下所具有的各项权限参数,可包括当前登录状态下对各个页面、各个页面中的页面组件或者各个页面组件中的各个元素的用户权限。
S4302、根据各项权限参数生成相对应的权限控制数据。
在一种可能的实现方式中,终端从服务器获取的各项权限参数为第一格式的权限参数,终端可以根据上述第一格式的权限参数,获取对应第二格式的权限参数,以得到上述权限控制数据。
比如,当前端框架在步骤410中获取到的该页面对象的权限参数,与前端框架在步骤420中传入权限控制单元的权限参数,两者所指示的用户权限相同,但是两者的格式可以不同。
比如,服务器侧基于数据管理的便捷性和数据量压缩的考虑,通过0和1的数字组合(即上述第一格式)表示各项权限参数,比如“1001”表示访问页面的权限,“1002”表示访问按钮的权限。而在终端侧,开发人员基于代码可读性的考虑,可以自定义通过英文单词(即上述第二格式)来表示各项权限参数,比如,“MAIN_READ”表示访问页面的权限,“BUTTON_READ”表示访问按钮的权限。
假设终端从服务器获取到的各项权参数为{1001:true,1002:true},则可以根据预先定义的各项权限参数第一格式与第二格式建立关系A,其中,该关系A可以表示为{MAIN_READ:1001,BUTTON_READ:1002},该关系A即为上述权限控制数据。
在另一种可能的实现方式中,终端也可以直接将从服务器获取到的各项权限参数作为权限控制数据。
假设终端从服务器获取到的各项权限参数为{1001:true,1002:true},则终端可以直接将该{1001:true,1002:true}获取为关系A,该关系A即为上述权限控制数据。
终端生成上述权限控制数据之后,将该权限控制数据在本地进行存储,以便权限控制单元调用。
步骤440,根据该权限参数与权限控制数据之间的比对结果获取权限控制信息。
其中,该权限控制信息用于指示该页面对象在当前登录状态下是否可见。
在本申请实施例中,终端可以通过权限控制单元,将页面对象的权限参数与权限控制数据中的各个权限参数进行比对,若比对结果为该页面对象的权限参数不存在于权限控制数据中,则终端可以获取第一控制信息,该第一控制信息用于指示该页面对象在当前登录状态下不可见。
可选的,若比对结果为该页面对象的权限参数存在于权限控制数据中,则终端可以获取第二控制信息,该第二控制信息用于指示该页面对象在当前登录状态下可见。
在一种可能的实现方式中,终端可以将页面对象的权限参数与权限控制数据中的各个权限参数分别进行比对,以确定权限控制数据中是否存在某个权限参数与页面对象的权限参数相一致,若权限控制数据中每个权限参数都与该页面对象的权限参数不一致,则确定该页面对象的权限参数不存在于权限控制数据中,也就是说,当前登录状态下有权限访问该页面对象;若权限控制数据中某个权限参数与该页面对象的权限参数一致,则确定该页面对象的权限参数存在于权限控制数据中,也就是说,当前登录状态下无权限访问该页面对象。
例如,当前端框架将某个页面对象的权限参数传入权限控制单元后,权限控制单元即可以查询上述建立的关系A,若关系A中不存在该页面对象的权限参数,则确定该页面对象的权限控制信息为第一控制信息;可选的,若关系A中存在该页面对象的权限参数,则确定该页面对象的权限控制信息为第二控制信息。
可选的,在一种可能的实现方式中,为了区分是直接传入权限参数,还是由权限控制单元自动获取页面对象的权限参数,当前端框架向权限控制单元传入的某个页面对象的权限参数为空时,可以默认该页面对象的权限参数是某个指定的权限参数,或者,由权限控制单元通过其它途径获取该页面对象的权限参数。
比如,由权限控制单元通过其它途径获取该页面对象的权限参数时,以上述指定的权限参数指示的是访问页面的用户权限为例,开发人员预先定义页面路由和权限的对应关系B,用于页面的访问权限控制。如首页路由为/index.html,则关系B可以定义为{‘index.html’:MAIN_READ}。在用户请求展示页面的过程中,对于页面这个页面对象,若该页面需要进行权限控制,则前端框架可以向权限控制单元传入空的权限参数,权限控制单元接收到空的权限参数后,获取当前页面的页面路由,并根据获取到的页面路由查询上述关系B,即可以确定权限参数具体为“MAIN_READ”,然后再通过查询关系A,确定关系A中是否包含权限参数“MAIN_READ”,若关系A中不存在该权限参数“MAIN_READ”,则确定该页面的权限控制信息为第一控制信息;可选的,若关系A中存在该权限参数“MAIN_READ”,则确定该页面的权限控制信息为第二控制信息。
步骤450,通过该权限控制单元,根据该权限控制信息对所述页面对象进行权限控制。
在本申请实施例中,对于不同粒度的页面对象,权限控制单元可执行的权限控制操作也可以不同。
比如,在一种可能的实现方式中,当该页面对象是页面,且该权限控制信息指示该页面对象在当前登录状态下不可见时,终端可以通过该权限控制单元,控制向指定页面跳转。
例如,当页面对象是当前请求展示的页面,且上述步骤440获取到的权限控制信息是第一控制信息时,终端可以通过该权限控制单元,控制跳转至某个指定的页面;比如,终端可以通过该权限控制单元,控制跳转至权限提醒页面,该权限提醒页面用于提醒用户没有权限访问请求的页面;或者,若当前处于未登录状态,则终端可以通过该权限控制单元,控制跳转至登录界面;若当前处于已登录状态,则终端可以通过该权限控制单元,控制跳转至权限获取界面(比如会员充值界面或者支付界面等)。
在另一种可能的实现方式中,当该页面对象是页面中的页面组件或者该页面组件中的元素,且该权限控制信息指示该页面对象在当前登录状态下不可见时,终端可以通过该权限控制单元将该页面对象的显示属性设置为隐藏。
例如,当页面对象是当前请求展示的页面中的页面组件或者页面组件中的元素,且上述步骤440获取到的权限控制信息是第一控制信息时,终端可以通过该权限控制单元,将该页面组件或者页面组件中的元素的显示属性设置为隐藏。
比如,终端可以通过该权限控制单元,将该页面组件或者页面组件中的元素对应的dom的display属性设置为none,以达到隐藏该页面组件或者页面组件中的元素的目的。
其中,本申请实施例所示的方案仅以上述权限控制操作为页面跳转或者隐藏为例进行介绍,可选的,上述权限控制操作也可以由开发人员自定义其它操作,比如关闭页面、将页面对象替换为指定对象(比如将按钮替换为文本框)、或者将按钮设置为可见但不可操作等等。
请参考图5,其示出了本申请实施例涉及的权限控制流程的示意图。如图5所示,终端中的WEB应用正在展示某一页面过程中,对页面对象进行权限控制的流程可以如下:
S51,WEB应用启动时,终端向服务器发送权限参数获取请求。
其中,在WEB应用启动时,WEB应用可以获取当前登录状态信息,比如是否登录以及已登录的用户账号等信息,并将当前登录状态信息携带在权限参数获取请求中发送给服务器,比如,发送给服务器中的权限管理单元。
除了WEB应用启动时发送权限参数获取请求,在登录状态发生变化时,WEB应用也会向服务器发送上述权限参数获取请求。
其中,上述发送权限参数获取请求的步骤可以由WEB应用中的权限控制单元执行,或者,上述步骤也可以由权限控制单元之外的其它软件单元执行,比如,由前端框架执行。
S52,服务器向终端返回当前登录状态下的各项权限参数,终端接收该服务器返回的各项权限参数,并生成权限控制数据。
其中,服务器中的权限管理单元管理有各个用户账号所具有的各项权限参数,以及未登录状态下所具有的各项权限参数。权限管理单元接收到终端发送的权限参数获取请求后,根据其中携带的当前登录状态信息,查询当前登录状态下所具有的各项权限参数,并将查询到的各项权限参数返回给终端。终端接收到上述各项权限参数之后,WEB应用生成权限控制数据并存储在本地,以便后续被权限控制单元调用。
可选的,当登录状态发生变化时,WEB应用重新发起权限参数获取请求时,WEB应用也可以通过新获取到的各项权限参数生成新的权限控制数据,并将原来存储的权限控制数据更新为新的权限控制数据。
S53,用户执行访问指定页面的操作时,终端向服务器发送页面数据获取请求。
用户在使用WEB应用的过程中,在点击访问某个指定页面时,WEB应用可以根据该指定页面的地址,向服务器发送包含该指定页面的地址的页面数据获取请求。
S54,服务器向终端返回该指定页面的页面数据。
比如,如图5所示,服务器中的页面数据管理单元可以将指定页面的页面数据发送给终端中的WEB应用。
S55,WEB应用中的前端框架将指定页面中需要权限控制的页面对象的权限参数传入权限控制单元。
其中,WEB应用中的前端框架在解析页面数据,并构建页面中各个页面对象的DOM元素时,若某个页面对象需要进行权限控制,则前端框架可以从该页面对象的页面数据中提取该页面对象的权限参数,并通过单次可执行的钩子函数,将权限参数以及页面对象的标识一起传入权限控制单元。
比如,假设页面对象是指定页面本身,权限参数为“MAIN_READ”,则前端框架将指定页面的标识和权限参数“MAIN_READ”一并传入权限控制单元;或者,当默认权限参数为空表示访问页面的用户权限时,前端框架也可以只向权限控制单元传入指定页面的标识。
再比如,假设页面对象是指定页面中的一个按钮,权限参数为“BUTTON_READ”,则前端框架将按钮的标识和权限参数“BUTTON_READ”一并传入权限控制单元。
S56,权限控制单元将页面对象的权限参数与权限控制数据中的权限参数进行比对,以确定该页面对象在当前登录状态下是否可见。
权限控制单元获取到前端框架传递过来的权限参数后,可以查询权限控制数据中是否包含该页面对象的权限参数,若不包含,则说明当前登录状态下无权限访问该页面对象,此时,权限控制单元确定该页面对象在当前登录状态下不可见;反之,若权限控制数据中包含该页面对象的权限参数,则说明当前登录状态下有权限访问该页面对象,此时权限控制单元确定该页面对象在当前登录状态下可见。
S57,当该页面对象在当前登录状态下不可见时,权限控制单元控制页面跳转或者控制页面对象隐藏。
其中,当页面对象是上述指定页面本身时,权限控制单元可以控制页面跳转至指定页面。
当上述页面对象是指定页面中的页面组件或者页面组件中的元素时,权限控制单元可以将页面对象的DOM元素的display属性设置为none。
在上述图5所示的方案中,若上述页面对象还需要执行其它逻辑控制,则前端框架还可以调用其它逻辑控制单元对该页面对象执行其它逻辑控制。并且,前端框架还可以调用其它逻辑控制单元对该页面对象执行其它逻辑控制的过程,与上述前端框架调用权限控制单元对该页面对象进行逻辑控制的过程无关。
例如,假设上述页面对象是一个按钮,该按钮对特定的用户可见,并且可以由用户自行删除或者添加。在上述指定页面的展示过程中,前端框架构建该按钮的DOM元素,并在渲染该DOM之前,调用单次可执行的钩子函数将该按钮的权限参数传入权限控制单元,以调用该权限控制单元对该按钮进行权限控制,同时,前端框架还调用其它逻辑控制单元判断该按钮是否被用户删除,若权限控制单元判断当前登录状态下有权访问该按钮,且其它逻辑控制单元判断该按钮未被用户删除,则前端框架可以对该按钮的DOM元素进行渲染并展示。
后续用户在指定页面中执行删除该按钮的操作后,前端框架可以再次调用其它逻辑控制单元判断该按钮是否被用户删除,并在其它逻辑控制单元判断该按钮被用户删除后,从指定页面中移除该按钮,在此过程中,前端框架并不会调用权限控制单元对该按钮进行权限控制。
综上所述,本申请实施例中提供的在前端渲染的场景下的权限控制方法,通过将前端框架获取的页面对象的权限参数传入独立于其他逻辑控制单元的权限控制单元(该权限控制单元是由前端框架的自定义指令实现的),由权限控制单元根据权限参数获取页面对象的权限控制信息,并根据权限控制信息实现对页面对象的权限控制,使得用于进行权限控制的逻辑单元与其他逻辑控制单元解耦,减少了在执行其他逻辑控制单元时对权限控制单元的重复执行,避免了不必要的权限控制过程所带来的资源浪费,从而提高页面对象的展示效率。
此外,本申请实施例中提供的方案,统一处理权限的逻辑判断,避免采用框架内置判断指令带来的业务耦合,并且在调用时,只需要传入所需要的权限参数,没有其他冗余,从而提高了代码的可阅读性和可维护性。
图6是根据一示例性实施例示出的一种前端渲染场景下的权限控制装置的结构方框图。该前端渲染场景下的权限控制装置可以用于计算机设备中,以执行本申请上述方法实施例中的全部或者部分步骤。其中,该前端渲染场景下的权限控制装置可以用于图1所示系统中的用户终端中。该前端渲染场景下的权限控制装置可以包括:
第一权限参数获取模块601,用于通过前端框架获取页面对象的权限参数,所述页面对象是前端框架当前渲染的页面中的页面对象,所述权限参数用于指示渲染所述页面对象所需的用户权限;
参数传入模块602,用于通过所述前端框架将所述权限参数传入权限控制单元,所述权限控制单元独立于其它逻辑控制单元,所述其它逻辑控制单元是具有权限控制之外的逻辑控制功能的软件单元;
权限控制信息获取模块603,用于通过所述权限控制单元,根据所述权限参数获取所述页面对象的权限控制信息,所述权限控制信息用于指示所述页面对象在当前登录状态下是否可见;
权限控制模块604,用于通过所述权限控制单元,根据所述权限控制信息对所述页面对象进行权限控制。
可选的,所述权限控制信息获取模块603,用于,
通过所述权限控制单元将所述权限参数与权限控制数据进行比对,所述权限控制数据中包含当前登录状态下所具有的各项权限参数;
根据所述权限参数与所述权限控制数据之间的比对结果获取所述权限控制信息。
可选的,在根据所述权限参数与所述权限控制数据之间的比对结果获取所述权限控制信息时,所述权限控制信息获取模块603,用于,
若所述比对结果为所述权限参数不存在于所述权限控制数据中,则获取第一控制信息,所述第一控制信息用于指示所述页面对象在当前登录状态下不可见。
可选的,所述装置还包括:
第二权限参数获取模块,用于在所述权限控制信息获取模块通过所述权限控制单元将所述权限参数与权限控制数据进行比对之前,从服务器获取当前登录状态下所具有的所述各项权限参数;
权限控制数据生成模块,用于根据所述各项权限参数生成所述权限控制数据。
可选的,所述权限控制模块604,用于当所述页面对象是所述页面,且所述权限控制信息指示所述页面对象在当前登录状态下不可见时,通过所述权限控制单元,控制向指定页面跳转。
可选的,所述权限控制模块604,用于当所述页面对象是所述页面中的页面组件或者所述页面组件中的元素,且所述权限控制信息指示所述页面对象在当前登录状态下不可见时,通过所述权限控制单元将所述页面对象的显示属性设置为隐藏。
可选的,所述参数传入模块602,用于通过所述前端框架调用指定钩子函数,将所述权限参数传入所述权限控制单元;所述指定钩子函数是针对所述页面对象单次可执行的钩子函数。
综上所述,本申请实施例中提供的在前端渲染的场景下的权限控制方法,通过将前端框架获取的页面对象的权限参数传入独立于其他逻辑控制单元的权限控制单元,由权限控制单元根据权限参数获取页面对象的权限控制信息,并根据权限控制信息实现对页面对象的权限控制,使得用于进行权限控制的逻辑单元与其他逻辑控制单元解耦,减少了在执行其他逻辑控制单元时对权限控制单元的重复执行,避免了不必要的权限控制过程所带来的资源浪费,从而提高页面对象的展示效率。
此外,本申请实施例中提供的方案,统一处理权限的逻辑判断,避免采用框架内置判断指令带来的业务耦合,并且在调用时,只需要传入所需要的权限参数,没有其他冗余,从而提高了代码的可阅读性和可维护性。
图7示出了本申请一个示例性实施例提供的计算机设备700的结构框图。该计算机设备700可以是图1所示系统中的用户终端。
通常的,计算机设备700包括有:处理器701和存储器702。
处理器701可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器701可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器701也可以包括主处理器和协处理器。在一些实施例中,处理器701可以在集成有GPU(Graphics Processing Unit,图像处理器),处理器701还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器702可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器702还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器702中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器701所执行以实现本申请上述方法实施例中的全部或者部分步骤。
在一些实施例中,计算机设备700还可选包括有:外围设备接口703和至少一个外围设备。处理器701、存储器702和外围设备接口703之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口703相连。具体地,外围设备包括:射频电路704、触摸显示屏705、摄像头706、音频电路707、定位组件708和电源709中的至少一种。
外围设备接口703可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器701和存储器702。
射频电路704用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。可选地,射频电路704包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路704可以通过至少一种无线通信协议来与其它计算机设备进行通信。在一些实施例中,射频电路704还可以包括NFC(NearField Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏705用于显示UI(UserInterface,用户界面)。当显示屏705是触摸显示屏时,显示屏705还具有采集在显示屏705的表面或表面上方的触摸信号的能力。
摄像头组件706用于采集图像或视频。在一些实施例中,摄像头组件706还可以包括闪光灯。
音频电路707可以包括麦克风和扬声器。在一些实施例中,音频电路707还可以包括耳机插孔。
定位组件708用于定位计算机设备700的当前地理位置,以实现导航或LBS(Location Based Service,基于位置的服务)。
电源709用于为计算机设备700中的各个组件进行供电。
在一些实施例中,计算机设备700还包括有一个或多个传感器710。该一个或多个传感器710包括但不限于:加速度传感器711、陀螺仪传感器712、压力传感器713、指纹传感器714、光学传感器715以及接近传感器716。
本领域技术人员可以理解,图7中示出的结构并不构成对计算机设备700的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括计算机程序(指令)的存储器,上述程序(指令)可由计算机设备的处理器执行以完成本申请各个方法实施例中的全部或者部分步骤。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
- 前端渲染场景下的权限控制方法、装置、设备及存储介质
- 一种前端元素的权限控制方法、装置、存储介质和设备