一种权限控制方法和装置转让专利

申请号 : CN201810260521.9

文献号 : CN108600177B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 雷小辉孙加光喻波王志海韩振国安鹏

申请人 : 北京明朝万达科技股份有限公司

摘要 :

本发明提供了一种权限控制方法和装置,该方法包括:当接收到权限控制请求时,获取每个角色的权限信息;按照角色的不同对权限信息分类缓存;根据当前用户的目标角色,在缓存的权限信息中查找对应目标角色的当前用户的目标权限集合信息;从目标权限集合信息中查找菜单级权限集合信息;将菜单级权限集合信息发送至客户端;接收客户端对展示的多个菜单中目标菜单的触发请求,确定触发请求对应的目标页面;根据目标权限集合信息中的按钮级权限信息和目标页面的按钮信息,确定目标页面中当前用户具有操作权限的多个按钮的按钮级权限集合信息;响应于触发请求,将按钮级权限集合信息发送至客户端。本发明能够展示用户具有操作权限的菜单和按钮。

权利要求 :

1.一种权限控制方法,其特征在于,包括:

当接收到权限控制请求时,获取每个角色的权限信息,其中,所述权限信息至少包括菜单级权限信息和按钮级权限信息;

按照角色的不同对所述权限信息分类缓存;

根据当前用户的目标角色,在缓存的所述权限信息中查找对应所述目标角色的所述当前用户的目标权限集合信息;

从所述目标权限集合信息中查找菜单级权限集合信息,其中,所述菜单级权限集合信息包括多个菜单的菜单信息和针对所述多个菜单的所述当前用户的权限信息;

将所述菜单级权限集合信息发送至客户端以使所述客户端能够根据所述菜单信息展示多个菜单;

接收所述客户端对展示的所述多个菜单中目标菜单的触发请求,确定所述目标菜单的触发请求对应的目标页面;其中,所述目标菜单的触发请求是所述客户端根据针对所述多个菜单的所述当前用户的权限信息,对所述目标菜单的触发请求逻辑校验通过后发送的;

根据所述目标权限集合信息中的按钮级权限信息和所述目标页面的按钮信息,确定所述目标页面中所述当前用户具有操作权限的多个按钮的按钮级权限集合信息,其中,所述按钮级权限集合信息包括所述多个按钮的按钮信息和针对所述多个按钮的所述当前用户的权限信息;

响应于所述目标菜单的触发请求,将所述按钮级权限集合信息发送至所述客户端以使所述客户端能够根据所述多个按钮的按钮信息在所述目标页面上展示多个按钮;

接收所述客户端的所述当前用户对展示的所述多个按钮中目标按钮的触发请求;其中,所述目标按钮的触发请求是所述客户端根据针对所述多个按钮的所述当前用户的权限信息,对所述目标按钮的触发请求逻辑校验通过后发送的;

在所述分类缓存的所述权限信息中,查询所述当前用户是否具备对所述目标按钮的触发请求的操作权限;

若是,则响应于所述触发请求执行相应操作。

2.根据权利要求1所述的方法,其特征在于,当所述目标角色的数量为多个时,所述根据当前用户的目标角色,在缓存的所述权限信息中查找对应所述目标角色的所述当前用户的目标权限集合信息,包括:根据当前用户的目标角色,在缓存的所述权限信息中查找每个目标角色对应的每个第一目标权限集合信息;

将多个第一目标权限集合信息的并集确定为所述当前用户的目标权限集合信息。

3.根据权利要求1所述的方法,其特征在于,所述根据当前用户的目标角色,在缓存的所述权限信息中查找对应所述目标角色的所述当前用户的目标权限集合信息,还包括:当对所述当前用户进行身份认证或者权限校验时,通过会话获取所述当前用户的角色集合,其中,所述角色集合包括一个或多个目标角色;

根据所述当前用户的目标角色,在缓存的所述权限信息中查找对应所述目标角色的所述当前用户的目标权限集合信息。

4.根据权利要求3所述的方法,其特征在于,所述从所述目标权限集合信息中查找菜单级权限集合信息,包括:当所述当前用户的身份认证成功、或者权限校验成功、或者接收到菜单列表更新请求时,从所述目标权限集合信息中查找菜单级权限集合信息。

5.根据权利要求1所述的方法,其特征在于,当所述目标按钮的触发请求为对权限信息进行更新时,所述响应于所述触发请求执行相应操作,包括:根据所述触发请求对数据库中存储的权限信息,以及分类缓存的所述权限信息进行更新。

6.一种权限控制装置,其特征在于,包括:

获取模块,用于当接收到权限控制请求时,获取每个角色的权限信息,其中,所述权限信息至少包括菜单级权限信息和按钮级权限信息;

缓存模块,用于按照角色的不同对所述权限信息分类缓存;

第一查找模块,用于根据当前用户的目标角色,在缓存的所述权限信息中查找对应所述目标角色的所述当前用户的目标权限集合信息;

第二查找模块,用于从所述目标权限集合信息中查找菜单级权限集合信息,其中,所述菜单级权限集合信息包括多个菜单的菜单信息和针对所述多个菜单的所述当前用户的权限信息;

发送模块,用于将所述菜单级权限集合信息发送至客户端以使所述客户端能够根据所述菜单信息展示多个菜单;

第一接收模块,用于接收所述客户端对展示的所述多个菜单中目标菜单的触发请求,确定所述目标菜单的触发请求对应的目标页面;其中,所述目标菜单的触发请求是所述客户端根据针对所述多个菜单的所述当前用户的权限信息,对所述目标菜单的触发请求逻辑校验通过后发送的;

确定模块,用于根据所述目标权限集合信息中的按钮级权限信息和所述目标页面的按钮信息,确定所述目标页面中所述当前用户具有操作权限的多个按钮的按钮级权限集合信息,其中,所述按钮级权限集合信息包括所述多个按钮的按钮信息和针对所述多个按钮的所述当前用户的权限信息;

第一响应模块,用于响应于所述目标菜单的触发请求,将所述按钮级权限集合信息发送至所述客户端以使所述客户端能够根据所述多个按钮的按钮信息在所述目标页面上展示多个按钮;

第二接收模块,用于接收所述客户端的所述当前用户对展示的所述多个按钮中目标按钮的触发请求;其中,所述目标按钮的触发请求是所述客户端根据针对所述多个按钮的所述当前用户的权限信息,对所述目标按钮的触发请求逻辑校验通过后发送的;

查询模块,用于在所述分类缓存的所述权限信息中,查询所述当前用户是否具备对所述目标按钮的触发请求的操作权限;

第二响应模块,用于若所述查询模块在所述分类缓存的所述权限信息中,查询到所述当前用户具备对所述目标按钮的触发请求的操作权限,则响应于所述触发请求执行相应操作。

7.根据权利要求6所述的装置,其特征在于,所述第一查找模块包括:第一查找子模块,用于当所述目标角色的数量为多个时,根据当前用户的目标角色,在缓存的所述权限信息中查找每个目标角色对应的每个第一目标权限集合信息;

确定子模块,用于将多个第一目标权限集合信息的并集确定为所述当前用户的目标权限集合信息。

8.根据权利要求6所述的装置,其特征在于,所述第一查找模块还包括:获取子模块,用于当对所述当前用户进行身份认证或者权限校验时,通过会话获取所述当前用户的角色集合,其中,所述角色集合包括一个或多个目标角色;

第二查找子模块,用于根据所述当前用户的目标角色,在缓存的所述权限信息中查找对应所述目标角色的所述当前用户的目标权限集合信息。

9.根据权利要求8所述的装置,其特征在于,所述第二查找模块包括:第三查找子模块,用于当所述当前用户的身份认证成功、或者权限校验成功、或者接收到菜单列表更新请求时,从所述目标权限集合信息中查找菜单级权限集合信息。

10.根据权利要求6所述的装置,其特征在于,所述第二响应模块包括:更新子模块,用于当所述目标按钮的触发请求为对权限信息进行更新时,则根据所述触发请求对数据库中存储的权限信息,以及分类缓存的所述权限信息进行更新。

说明书 :

一种权限控制方法和装置

技术领域

[0001] 本发明涉及信息安全技术领域,特别是涉及一种权限控制方法和装置。

背景技术

[0002] 伴随网络的飞速发展,网络办公已成为工作中不可或缺的一部分。然而,网络正由于其高效和虚拟化,其管理和权限控制显得极其重要了。权限对于一个系统的重要性不言而喻,现代企业中的管控系统多采用分布式、多点集成,多级多类别权限管理员管控,在各司其职的原则下如何保重集权和放权并重是管控系统重要工作之一。
[0003] 目前业界较流行的权限控制框架有shiro框架(Shiro:在java中提到shiro指的是Apache Shiro,Apache Shiro是一个强大且易用的Java安全框架)和spring Security框架,这两种安全框架均可实现认证、授权、管理会话和密码加密等功能。Spring Security框架功能强大却必须依赖Spring,不够灵活且较笨重,shiro框架灵活轻巧但使用拦截方式或注解方式授权用户体验效果较差,若采用标签和编程式授权源码复用性较差、耦合过高不符合WEB标准且定制化开发支持不够。
[0004] 具体而言,如图1所示,shiro框架追求全面,强调一站式服务。在请求服务之前,权限框架首先判断是否通过了认证,然后再判断是否在会话中,最后再判断是否具有当前请求的权限,但正由于其全面的权限控制作为其框架中一部分,只要配置权限控制的逻辑就需要完成以上三步骤甚至更多,这样导致了重复性工作(例如上述认证步骤和权限校验步骤)徒增;采用这种方式,每个操作均使用权限框架校验权限,用户只有在执行相关动作后方可得知是否有权限,用户体验较差;采用标签形式可动态控制用户按钮级权限,但jsp环境依赖严重,不利于项目前端静态化处理,且效率较低;权限的查询、校验和过滤均在服务端完成,当客户端并发较大时会出现延时;此外,shiro安全框架封装较深、文件较大,学习和维护成本较高。
[0005] 因此,目前需要本领域技术人员迫切解决的一个技术问题就是:如何提供一种符合用户操作习惯,用户体验感好的权限控制方案。

发明内容

[0006] 本发明提供了一种权限控制方法和装置,以解决传统技术中的权限控制方案所存在的展示的菜单或者按钮并非用户均具有操作权限,造成用户体验较差的问题。
[0007] 为了解决上述问题,根据本发明的一个方面,本发明公开了一种权限控制方法,包括:
[0008] 当接收到权限控制请求时,获取每个角色的权限信息,其中,所述权限信息至少包括菜单级权限信息和按钮级权限信息;
[0009] 按照角色的不同对所述权限信息分类缓存;
[0010] 根据当前用户的目标角色,在缓存的所述权限信息中查找对应所述目标角色的所述当前用户的目标权限集合信息;
[0011] 从所述目标权限集合信息中查找菜单级权限集合信息,其中,所述菜单级权限集合信息包括多个菜单的菜单信息和针对所述多个菜单的所述当前用户的权限信息;
[0012] 将所述菜单级权限集合信息发送至客户端以使所述客户端能够根据所述菜单信息展示多个菜单;
[0013] 接收所述客户端对展示的所述多个菜单中目标菜单的触发请求,确定所述触发请求对应的目标页面;
[0014] 根据所述目标权限集合信息中的按钮级权限信息和所述目标页面的按钮信息,确定所述目标页面中所述当前用户具有操作权限的多个按钮的按钮级权限集合信息,其中,所述按钮级权限集合信息包括所述多个按钮的按钮信息和针对所述多个按钮的所述当前用户的权限信息;
[0015] 响应于所述触发请求,将所述按钮级权限集合信息发送至所述客户端以使所述客户端能够根据所述多个按钮的按钮信息在所述目标页面上展示多个按钮。
[0016] 根据本发明的另一方面,本发明还公开了一种权限控制装置,包括:
[0017] 获取模块,用于当接收到权限控制请求时,获取每个角色的权限信息,其中,所述权限信息至少包括菜单级权限信息和按钮级权限信息;
[0018] 缓存模块,用于按照角色的不同对所述权限信息分类缓存;
[0019] 第一查找模块,用于根据当前用户的目标角色,在缓存的所述权限信息中查找对应所述目标角色的所述当前用户的目标权限集合信息;
[0020] 第二查找模块,用于从所述目标权限集合信息中查找菜单级权限集合信息,其中,所述菜单级权限集合信息包括多个菜单的菜单信息和针对所述多个菜单的所述当前用户的权限信息;
[0021] 发送模块,用于将所述菜单级权限集合信息发送至客户端以使所述客户端能够根据所述菜单信息展示多个菜单;
[0022] 第一接收模块,用于接收所述客户端对展示的所述多个菜单中目标菜单的触发请求,确定所述触发请求对应的目标页面;
[0023] 确定模块,用于根据所述目标权限集合信息中的按钮级权限信息和所述目标页面的按钮信息,确定所述目标页面中所述当前用户具有操作权限的多个按钮的按钮级权限集合信息,其中,所述按钮级权限集合信息包括所述多个按钮的按钮信息和针对所述多个按钮的所述当前用户的权限信息;
[0024] 第一响应模块,用于响应于所述触发请求,将所述按钮级权限集合信息发送至所述客户端以使所述客户端能够根据所述多个按钮的按钮信息在所述目标页面上展示多个按钮。
[0025] 与现有技术相比,本发明包括以下优点:
[0026] 本发明通过将权限按照控制的颗粒度,分为菜单级权限集合信息和按钮级权限集合信息,其中,菜单级权限集合信息为根据用户的角色而生成的,并通过权限直接控制菜单或者按钮的生成和展示,使得用户看到的菜单和按钮均具有操作权限,减少了不必要的网络交互,符合用户操作习惯,提升了用户体验。

附图说明

[0027] 图1是现有技术中的一种权限控制方法实施例的步骤流程图;
[0028] 图2是本发明的一种权限控制方法实施例的步骤流程图;
[0029] 图3是本发明的另一种权限控制方法实施例的步骤流程图;
[0030] 图4是本发明的一种权限控制装置实施例的结构框图。

具体实施方式

[0031] 为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
[0032] 参照图2,示出了本发明的一种权限控制方法实施例的步骤流程图;参照图3,示出了本发明的一种基于B/S(浏览器/服务器)模式的权限控制方法的流程图,可以看出,权限控制方法涉及了三个部分,分别是客户端(本例以浏览器为例)、服务器(本例以web服务为例)和数据库三部分。
[0033] 注:本实施例的图3所示的流程图仅显示出了权限相关部分,其他未给出流程部分为已知方法,这里不再赘述。
[0034] 下面结合图2和图3来对本发明实施例的权限控制方法作详细介绍:
[0035] 参照图2,本发明实施例的方法具体可以包括如下步骤:
[0036] 步骤101,当接收到权限控制请求时,获取每个角色的权限信息,其中,所述权限信息至少包括菜单级权限信息和按钮级权限信息;
[0037] 其中,参照图3,当权限控制服务启动时,即接收到权限控制请求时,服务器查询数据库来获取应用本发明实施例的权限控制方法的目标系统中每个角色的权限信息,其中,每个角色的权限信息为该角色具备的所有权限信息。
[0038] 菜单级权限信息包括操作者对某个菜单对应的URL的控制权限,以及某个菜单的菜单信息(例如菜单中的元素、菜单的渲染信息等等)。其中,具备这个URL的权限意味着用户可对这个URL对应的服务进行访问,否则用户被拒绝访问这个URL对应的服务。
[0039] 按钮级权限信息包括操作者对某个按钮(或者其他可触发动作的元素)对应的请求的控制权限,以及该某个按钮的按钮信息(例如按钮的元素、按钮的渲染信息等等)。如一般应用系统中的“修改”、“删除”、“更新”按钮等,“修改”按钮对应于后台请求的某个地址,具有这个权限的用户可以访问这个地址,反之请求会被拒绝。
[0040] 步骤102,按照角色的不同对所述权限信息分类缓存;
[0041] 其中,参照图3,可以将获取到的各个角色的所有权限信息缓存到角色权限缓存子模块中。其中,在存储该权限信息时,如图3所示,按照角色-权限信息的方式进行关联存储,其中,每个角色关联有该角色具备的所有权限信息,即权限集。
[0042] 步骤103,根据当前用户的目标角色,在缓存的所述权限信息中查找对应所述目标角色的所述当前用户的目标权限集合信息;
[0043] 其中,该目标权限集合信息同样包括菜单级权限信息和按钮级权限信息。
[0044] 其中,在一种可选地实施方式中,当需要对所述当前用户进行身份认证或者权限校验时,可以通过会话来获取所述当前用户的角色集合,其中,所述角色集合包括一个或多个目标角色。
[0045] 即,通过会话查询的方式来确定该当前用户具备哪些角色,例如产品经理、总经理等。
[0046] 在一种可选地实施方式中,当所述目标角色的数量为一个时,则可以直接从图3所示的关联存储的各组权限集中来获取该目标角色对应的一个权限集,例如角色2对应的权限集。
[0047] 在另一种可选地实施方式中,当所述目标角色的数量为多个时,则可以根据当前用户的目标角色,在缓存的所述权限信息中查找每个目标角色对应的每个第一目标权限集合信息;并将多个第一目标权限集合信息的并集确定为所述当前用户的目标权限集合信息。
[0048] 也就是说,如果当前用户具备多个角色时,可以在图3的橘色权限缓存子模块中缓存的多组权限集中查找其每个目标角色对应的权限集,例如该用户具有角色1和角色2,则这里需要获取角色1对应的权限集和角色2对应的权限集;并且,由于各个角色的权限集之间可能存在相同的权限,因此,这里需要对获取到的两个权限集取并集,该并集中的所有权限信息为所述当前用户具备的所有权限的相关信息,构成目标权限集合信息。
[0049] 在一种可选地实施方式中,在步骤103之后,根据本发明实施例的方法还可以对所述目标权限集合信息进行缓存;
[0050] 其中,为了方便后续步骤中对该目标权限集合中的信息的查找,避免重复地从角色权限缓存子模块中分类缓存的权限集中再次获取该目标权限集合,这里可以直接将所述目标权限集合信息进行缓存。
[0051] 步骤104,从所述目标权限集合信息中查找菜单级权限集合信息;
[0052] 其中,在一种可选地实施方式中,当所述当前用户的身份认证成功、或者权限校验成功、或者接收到菜单列表更新请求时,则可以从所述目标权限集合信息中查找菜单级权限集合信息。
[0053] 其中,目标权限集合信息中包括该当前用户具备的所有权限的相关信息而这里只需要从该目标权限集合信息中获取该当前用户具备的涉及对菜单的所有权限信息相关信息;
[0054] 其中,所述菜单级权限集合信息可以包括多个菜单(即当前用户具备操作权限的菜单)的菜单信息(例如每个菜单的元素、菜单的渲染信息等等)和针对所述多个菜单的所述当前用户的权限信息(即,该用户对其具备权限的每个菜单的操作权限是什么)。
[0055] 步骤105,将所述菜单级权限集合信息发送至客户端以使所述客户端能够根据所述多个菜单的菜单信息展示多个菜单;
[0056] 其中,参照图3,服务器可以将菜单级权限集合信息(即菜单级权限集)发送至客户端,客户端可以对该菜单级权限集进行解析、并根据其中的菜单信息动态生成各个菜单,并渲染各个菜单,最后,在客户端页面上可以显示该用户具备操作权限的多个菜单,例如菜单1,菜单2……菜单n。
[0057] 步骤106,接收所述客户端对展示的所述多个菜单中目标菜单的触发请求,确定所述触发请求对应的目标页面;
[0058] 其中,用户在从客户端看到展示的其具有操作权限的多个菜单后,其可以对任意一个菜单进行触发操作(其中,触发操作的方式包括但不限于单击、双击等等),从而触发对某个菜单,例如菜单2的触发请求。
[0059] 其中,每个菜单在触发后都对应有一个URL,即触发请求为客户端发送的是对该URL的访问请求,因此,服务器可以以此来确定触发请求对应的目标页面,即URL对应的目标页面。
[0060] 在一种可选地实施方式中,在客户端在将触发请求发送至服务器之前,客户端在接收到用户对目标菜单的触发请求后,首先可以根据步骤105中接收到的上述针对所述多个菜单的所述当前用户的权限信息(即,该用户对其具备权限的每个菜单的操作权限是什么)来对所述触发请求进行逻辑校验,校验当前用户在目标菜单上是否具备请求的权限,从而避免仿用户信息来进行菜单操作的行为,以及减少对服务器的不必要请求。待确定当前用户对该目标菜单具备该操作权限时,才会将触发请求发送至服务器,从而减轻服务器的处理压力。
[0061] 那么用户在操作上述多个菜单中的任意一个菜单的时候(如点击或鼠标在菜单上移动等行为),触发请求在发送至服务器之前,客户端均可以对该触发请求进行逻辑校验来确定该用户是否对该菜单具备操作权限。
[0062] 步骤107,根据所述目标权限集合信息中的按钮级权限信息和所述目标页面的按钮信息,确定所述目标页面中所述当前用户具有操作权限的多个按钮的按钮级权限集合信息,其中,所述按钮级权限集合信息包括所述多个按钮的按钮信息和针对所述多个按钮的所述当前用户的权限信息;
[0063] 其中,目标权限集合信息包括所述当前用户具备的所有权限的相关信息,因此,本步骤还需要从目标权限集合信息中筛选出按钮级权限信息(即,该用户对哪些按钮具有何种权限的信息)。其中,在图3的实施例中,例如用户的角色只包括角色2,那么目标权限集合信息即对应于图3中角色2对应的权限集。而由于图3实施例中未将目标权限集合信息从分类缓存的权限集中单独提取进行缓存,所以,这里的按钮级权限信息也是从图3中角色2对应的权限集中筛选出来的。
[0064] 此外,服务器侧还可以确定URL指向的目标页面的按钮信息(即该页面具备哪些按钮)。
[0065] 那么利用该用户具备哪些按钮的操作权限,以及在该所述目标页面中具有哪些按钮这两种信息,就可以直接确定出该用户对该目标页面中的哪些按钮具有操作权限,而在目标页面中具有操作权限的按钮的按钮级权限集合信息也同样存储在角色权限缓存子模块的分类缓存中。
[0066] 所以,本步骤可以直接确定出所述当前用户具有操作权限的多个按钮的按钮级权限集合信息,其中,所述按钮级权限集合信息包括所述多个按钮的按钮信息(例如按钮的元素、按钮的渲染信息、按钮被触发后指向的路径等等)和该当前用户在目标页面中具有操作权限的多个按钮的权限信息;
[0067] 在一种可选地实施方式中,在步骤107之后,根据本发明实施例的方法还可以对所述按钮级权限集合信息进行缓存。
[0068] 其中,为了方便后续步骤中对该按钮级权限集合信息中的信息的查找,避免重复地从角色权限缓存子模块中分类缓存的权限集、或者目标权限集合中再次获取该按钮级权限集合信息,这里可以直接将所述按钮级权限集合信息进行缓存。
[0069] 例如图3所示的流程图中,服务器从分类缓存的权限集中将按钮级权限集合信息进行单独缓存,得到权限缓存块。
[0070] 步骤108,响应于所述触发请求,将所述按钮级权限集合信息发送至所述客户端以使所述客户端能够根据所述多个按钮的按钮信息在所述目标页面上展示多个按钮。
[0071] 其中,服务器可以响应于客户端发送的针对目标页面的URL的访问请求,将该目标页面中该当前用户具有操作权限的多个按钮的按钮信息(如图3所示,这里包括每个按钮对应的子元素,即按钮的显示按键,以及每个被显示的按键被触发后指向的路径,例如按钮1指向的路径为“按钮1路径”)和权限信息发送给客户端。
[0072] 其中,客户端根据接收到的信息,可以利用本地的按钮生成插件在目标页面中显示各个子元素,即显示各个该用户具有操作权限的按钮的按键,并根据各个按钮的渲染信息对各个按钮在目标页面上进行渲染显示(例如显示位置是哪里,显示效果是怎样的等等渲染);并且,对各个按钮绑定事件,其中,每个按钮所绑定的事件包括两类,类型一为触发事件,类型二为跳转事件。其中,触发事件可以是点击、回车、双击等等事件,即当检测到用户对该按钮的该触发事件后跳转到相应的跳转事件;其中,按钮的跳转事件可以为点击该按钮后执行的操作,例如删除操作、提交操作等等。
[0073] 在一种可选地实施方式中,在步骤108之后,根据本发明实施例的方法还可以包括:
[0074] 步骤109,接收所述客户端的所述当前用户对展示的所述多个按钮中目标按钮的触发请求;
[0075] 其中,客户端展示有该当前用户具有操作权限的多个按钮,当用户触发了任意一个目标按钮时,可以将触发请求发送至服务器,使得服务器接收到该当前用户对该目标按钮的触发请求。
[0076] 在一种可选地实施方式中,在客户端在将步骤109中的触发请求发送至服务器之前,客户端在接收到用户对目标按钮的触发请求后,首先可以根据步骤107中接收到的上述针对所述多个按钮的所述当前用户的权限信息来对步骤109中的所述触发请求进行逻辑校验,校验当前用户在目标按钮的操作上是否具备请求权限,从而避免仿用户信息来进行按钮操作的行为,以及减少对服务器的不必要请求。待确定当前用户对该目标按钮具备该操作权限时,才会将触发请求发送至服务器,从而减轻服务器的处理压力。
[0077] 那么用户在操作上述多个按钮中的任意一个按钮的时候(如点击或鼠标在按钮上移动等行为),在接收到对该按钮的触发请求之后,在将该触发请求发送至服务器之前,客户端均可以对该触发请求进行逻辑校验来确定该用户是否对该按钮具备操作权限。
[0078] 步骤110,在所述分类缓存的所述权限信息中,查询所述当前用户是否具备对所述目标按钮的触发请求的操作权限;
[0079] 其中,为了避免攻击者破解服务器侧的程序逻辑,伪装用户请求服务器进行上述步骤101~步骤108的操作,这里为了进一步提升信息的安全性,可以在如图3所示的分角色存储的各个权限集中,来查询当前用户是否具备对该目标按钮的触发请求的操作权限。
[0080] 在一种可选地实施方式中,如果上述步骤中缓存了上述目标权限集合信息,则还可以在缓存的所述目标权限集合信息中查询所述当前用户是否具备对所述目标按钮的触发请求的操作权限;
[0081] 或者,如果上述步骤中缓存了按钮级权限集合信息,即如图3所示,单独缓存得到了权限缓存块,则服务器还可以在缓存的所述按钮级权限集合信息(即权限缓存块)中,查询所述当前用户是否具备对所述目标按钮的触发请求的操作权限。
[0082] 步骤111,若是,则响应于所述触发请求执行相应操作。
[0083] 这样,可以进一步提升系统安全性。
[0084] 在一种可选地实施方式中,当步骤109中的所述目标按钮的触发请求为对权限信息进行更新时(例如图3所示的在执行后续操作时,可以判断该触发请求是否为需要更新权限集,如果是,则说明对该目标按钮的触发请求为对权限信息进行更新),则在执行步骤111的所述响应于所述触发请求执行相应操作时,则可以如图3所示,根据所述触发请求对数据库中存储的权限信息,以及分类缓存的所述权限信息(即橘色权限缓存子模块中的权限信息)进行更新。
[0085] 如果否,则说明该用户不具备该触发请求的访问权限,认为是网络攻击或者非法请求,服务器拒绝请求。
[0086] 在一种可选地实施方式中,当上述实施例中的所述目标权限集合信息也从分类缓存的所述权限信息中单独提取出来缓存后,则根据本发明实施例的方法还需要根据所述触发请求对缓存的所述目标权限集合信息进行更新;
[0087] 在一种可选地实施方式中,当上述实施例中的所述按钮级权限集合信息也从分类缓存的所述权限信息中单独提取出来缓存后,即得到图3所示的权限缓存块,则根据本发明实施例的方法还需要根据所述触发请求对缓存的所述按钮级权限集合信息(即权限缓存块)进行更新。
[0088] 借助于本发明上述实施例的技术方案,本发明通过将权限按照控制的颗粒度,分为菜单级权限集合信息和按钮级权限集合信息,其中,菜单级权限集合信息为根据用户的角色而生成的,并通过权限直接控制菜单或者按钮的生成和展示,使得用户看到的菜单和按钮均具有操作权限,减少了不必要的网络交互,符合用户操作习惯,提升了用户体验。
[0089] 综上,本发明具有如下优点:
[0090] (1)、简化权限控制逻辑
[0091] 将权限按照控制的颗粒度,分为菜单级权限和按钮级权限。菜单级权限根据用户信息直接生成,用户可看到的菜单均具有权限,如此减少了不必要的网络交互;在菜单被请求时为当前请求缓存了用户具有权限的所有可能的动作权限(按钮级权限),菜单对应的用户具有操作权限的所有按钮级权限被返回;
[0092] (2)、提升用户的体验
[0093] 通过权限直接控制菜单或按钮的生成,凡是用户可以看到按钮均有权限,这符合用户的一般操作习惯,体验性更好。
[0094] (3)、降低与展现层的耦合
[0095] 使用动态生成具有权限的按钮(或者元素),无需再在原展现层中使用标签插入在指定的位置,降低了与展现层的耦合。
[0096] (4)、加强与其他框架或组件的组合使用
[0097] 使用一些其他框架或组件,如jQgrid时表格中按钮有的是生成的而非标签渲染,此时使用原标签控制权限方式不可用。采用本控制方法可完成动态生成按钮(或其他元素)这类需求。
[0098] (5)、提高适配性
[0099] 采用组件机制,以数据为驱动,展现层需要控制权限时只需要访问相关插件即可实现。
[0100] (6)、可前端静态化处理
[0101] 使用本发明实施例的权限控制方法,去掉了与jsp(或其他必须环境)的耦合,使得展现层更加轻量级、灵活,必要时完全可静态化。
[0102] (7)、富客户端处理,高并发下性能仍可保持
[0103] 在用户请求时菜单级时,服务端只需从缓存中返回按钮权限集,客户端根据返回的权限集渲染相关元素。由于服务端的工作量较少,且从缓存中获取因此高并发下性能也会保持较好。另外,为防止网络攻击,可在用户非查询请求时候添加权限判断。
[0104] 需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
[0105] 与上述本发明实施例所提供的方法相对应,参照图4,示出了本发明一种权限控制装置实施例的结构框图,具体可以包括如下模块:
[0106] 获取模块31,用于当接收到权限控制请求时,获取每个角色的权限信息,其中,所述权限信息至少包括菜单级权限信息和按钮级权限信息;
[0107] 缓存模块32,用于按照角色的不同对所述权限信息分类缓存;
[0108] 第一查找模块33,用于根据当前用户的目标角色,在缓存的所述权限信息中查找对应所述目标角色的所述当前用户的目标权限集合信息;
[0109] 第二查找模块34,用于从所述目标权限集合信息中查找菜单级权限集合信息,其中,所述菜单级权限集合信息包括多个菜单的菜单信息和针对所述多个菜单的所述当前用户的权限信息;
[0110] 发送模块35,用于将所述菜单级权限集合信息发送至客户端以使所述客户端能够根据所述菜单信息展示多个菜单;
[0111] 第一接收模块36,用于接收所述客户端对展示的所述多个菜单中目标菜单的触发请求,确定所述触发请求对应的目标页面;
[0112] 确定模块37,用于根据所述目标权限集合信息中的按钮级权限信息和所述目标页面的按钮信息,确定所述目标页面中所述当前用户具有操作权限的多个按钮的按钮级权限集合信息,其中,所述按钮级权限集合信息包括所述多个按钮的按钮信息和针对所述多个按钮的所述当前用户的权限信息;
[0113] 第一响应模块38,用于响应于所述触发请求,将所述按钮级权限集合信息发送至所述客户端以使所述客户端能够根据所述多个按钮的按钮信息在所述目标页面上展示多个按钮。
[0114] 可选地,所述第一查找模块33包括:
[0115] 第一查找子模块,用于当所述目标角色的数量为多个时,根据当前用户的目标角色,在缓存的所述权限信息中查找每个目标角色对应的每个第一目标权限集合信息;
[0116] 确定子模块,用于将多个第一目标权限集合信息的并集确定为所述当前用户的目标权限集合信息。
[0117] 可选地,所述第一查找模块33还包括:
[0118] 获取子模块,用于当对所述当前用户进行身份认证或者权限校验时,通过会话获取所述当前用户的角色集合,其中,所述角色集合包括一个或多个目标角色;
[0119] 第二查找子模块,用于根据所述当前用户的目标角色,在缓存的所述权限信息中查找对应所述目标角色的所述当前用户的目标权限集合信息。
[0120] 可选地,所述第二查找模块34包括:
[0121] 第三查找子模块,用于当所述当前用户的身份认证成功、或者权限校验成功、或者接收到菜单列表更新请求时,从所述目标权限集合信息中查找菜单级权限集合信息。
[0122] 可选地,所述装置还包括:
[0123] 第二接收模块,用于接收所述客户端的所述当前用户对展示的所述多个按钮中目标按钮的触发请求;
[0124] 查询模块,用于在所述分类缓存的所述权限信息中,查询所述当前用户是否具备对所述目标按钮的触发请求的操作权限;
[0125] 第二响应模块,用于若所述查询模块在所述分类缓存的所述权限信息中,查询到所述当前用户具备对所述目标按钮的触发请求的操作权限,则响应于所述触发请求执行相应操作。
[0126] 可选地,所述第二响应模块包括:
[0127] 更新子模块,用于当所述目标按钮的触发请求为对权限信息进行更新时,则根据所述触发请求对数据库中存储的权限信息,以及分类缓存的所述权限信息进行更新。
[0128] 对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0129] 本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
[0130] 本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0131] 本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0132] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0133] 这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0134] 尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
[0135] 最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
[0136] 以上对本发明所提供的一种权限控制方法和一种权限控制装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。