角色权限的动态控制方法及系统转让专利

申请号 : CN201510733094.8

文献号 : CN105426769B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王剑龙刘宏

申请人 : 歌尔股份有限公司

摘要 :

本发明提供一种角色权限的动态控制方法及系统,其中的方法包括:根据角色获取角色所对应的模块的各权限;对模块的各权限进行修改、保存;修改模块的各权限包括按照2的幂级分别对模块的各权限进行赋值,对模块赋值后的各权限进行选择;对选择出的权限进行权限值求和,并将求得的和值保存在预设的对应关系表中,对应关系表具有角色、模块、权限三者间的对应关系;根据角色获取角色所对应的模块的各权限的权限值;将模块的各权限的权限值分别与保存在对应关系表中的和值进行按位与运算,在运算后得出的某个值与模块的某个权限的权限值相同时,加载与该权限值对应的模块的权限。利用本发明能够实现实时更改用户角色在模块中的权限的功能。

权利要求 :

1.一种角色权限的动态控制方法,包括角色权限修改阶段和角色权限加载阶段,其中,所述角色权限修改阶段,包括:根据角色获取所述角色所对应的模块的各权限;

对所述模块的各权限进行修改、保存;其中,修改所述模块的各权限包括:按照2的幂级分别对所述模块的各权限进行赋值,以及,对所述模块赋值后的各权限进行选择;

对选择出的权限进行权限值求和,并将求得的和值保存在预设的对应关系表中,所述对应关系表具有角色、模块、权限三者间的对应关系;

所述角色权限加载阶段,包括:

根据所述角色获取所述角色所对应的模块的各权限的权限值;

将所述模块的各权限的权限值分别与保存在所述对应关系表中的和值进行按位与运算,在运算后得出的某个值与所述模块的某个权限的权限值相同时,加载与该权限值对应的模块的权限。

2.如权利要求1所述的角色权限的动态控制方法,其中,

当再次对所述模块的各权限进行修改时,不重新对所述模块的各权限进行赋值,而仅重新对所述模块赋值后的各权限进行选择。

3.如权利要求2所述的角色权限的动态控制方法,其中,在重新对所述模块的各权限进行选择之前,对所述模块的各权限的状态进行判断,判断的过程包括:将所述模块的各权限的权限值分别与所述和值进行按位与运算,在运算后得出的某个值与所述模块的某个权限的权限值相同时,判断与该权限值对应的所述模块的权限的状态为已选择。

4.如权利要求1所述的角色权限的动态控制方法,其中,还将求得的和值保存到会话中,以及,在加载模块的权限之后,当有请求访问所述权限时,将所述权限对应的权限值与保存在所述会话中的和值进行按位与运算;如果运算后得出的值与所述权限对应的权限值相同,执行所述请求访问所述权限;如果运算后得出的值与所述权限对应的权限值不相同,拒绝所述请求访问所述权限。

5.一种角色权限的动态控制系统,包括:

权限获取单元,用于根据角色获取所述角色所对应的模块的各权限;

权限修改单元,用于对所述模块的各权限进行修改;其中,权限修改单元包括权限赋值模块和权限选择模块;所述权限赋值模块用于按照2的幂级分别对所述模块的各权限进行赋值,所述权限选择模块用于对所述模块赋值后的各权限进行选择;

权限保存单元,用于对修改后的所述模块的各权限进行保存;

权限值求和单元,用于对选择出的权限进行权限值求和,并将求得的和值保存在预设的对应关系表中,所述对应关系表具有角色、模块、权限三者间的对应关系;

权限值获取单元,用于根据所述角色获取所述角色所对应的模块的各权限的权限值;

权限值运算单元,用于将所述模块的各权限的权限值分别与保存在所述对应关系表中的和值进行按位与运算;

权限加载单元,用于在运算后得出的某个值与所述模块的某个权限的权限值相同时,加载与该权限值对应的模块的权限。

6.如权利要求5所述的角色权限的动态控制系统,其中,

当所述权限修改单元再次对所述模块的各权限进行修改时,不根据所述权限赋值模块重新对所述模块的各权限进行赋值,而仅根据所述权限选择模块重新对所述模块赋值后的各权限进行选择。

7.如权利要求6所述的角色权限的动态控制系统,其中,

权限修改单元还包括权限状态判断模块,用于在所述权限选择模块重新对所述模块的各权限进行选择之前,对所述模块的各权限的状态进行判断;其中,将所述模块的各权限的权限值分别与所述和值进行按位与运算,在运算后得出的某个值与所述模块的某个权限的权限值相同时,所述权限状态判断模块判断与该权限值对应的所述模块的权限的状态为已选择。

8.如权利要求5所述的角色权限的动态控制系统,还包括权限值保存单元,用于将所述权限值求和单元求得的和值保存到会话中。

9.如权利要求8所述的角色权限的动态控制系统,还包括访问权限判断单元,用于在所述权限加载单元加载模块的权限之后,当有请求访问所述权限时,判断所述请求是否允许访问所述权限;其中,访问权限判断单元包括访问允许模块和访问拒绝模块,将所述权限对应的权限值与保存在所述会话中的和值进行按位与运算;如果运算后得出的值与所述权限对应的权限值相同,所述访问允许模块允许所述请求访问所述权限;如果运算后得出的值与所述权限对应的权限值不相同,所述访问拒绝模块拒绝所述请求访问所述权限。

说明书 :

角色权限的动态控制方法及系统

技术领域

[0001] 本发明涉及系统对象属性动态实时控制技术领域,更为具体地,涉及一种角色权限的动态控制方法及系统。

背景技术

[0002] 在一个系统中,会按照权限将用户划分为不同的角色,每个角色分配不同的权限。在实际的系统设计中,系统分为不同的模块,同一个角色在不同的模块中会有不同的权限,而且这些权限的设置并不是一成不变的,是随着系统或实际业务需求的变化而不断变化的。因此,需要能够对用户角色在不同模块中的权限进行实时更改,而现有的系统设计中,还未实现对用户角色在不同模块中的权限进行实时更改的功能。

发明内容

[0003] 鉴于上述问题,本发明的目的是提供一种角色权限的动态控制方法及系统,以解决现有系统中无法对处于不同模块中用户角色的权限进行实时更改的问题。
[0004] 本发明提供一种角色权限的动态控制方法,包括角色权限修改阶段和角色权限加载阶段;
[0005] 角色权限修改阶段,包括:
[0006] 根据角色获取角色所对应的模块的各权限;
[0007] 对模块的各权限进行修改、保存;其中,修改模块的各权限包括:按照2的幂级分别对模块的各权限进行赋值,以及,对模块赋值后的的各权限进行选择;
[0008] 对选择出的权限进行权限值求和,并将求得的和值保存在预设的对应关系表中,对应关系表具有角色、模块、权限三者间的对应关系;
[0009] 角色权限加载阶段,包括:
[0010] 根据角色获取角色所对应的模块的各权限的权限值;
[0011] 将模块的各权限的权限值分别与保存在对应关系表中的和值进行按位与运算,在运算后得出的某个值与模块的某个权限的权限值相同时,加载与该权限值对应的模块的权限。
[0012] 本发明还提供一种角色权限的动态控制系统,包括:
[0013] 权限获取单元,用于根据角色获取角色所对应的模块的各权限;
[0014] 权限修改单元,用于对模块的各权限进行修改;其中,权限修改单元包括权限赋值模块和权限选择模块;权限赋值模块用于按照2的幂级分别对模块的各权限进行赋值,权限选择模块用于对模块赋值后的各权限进行选择;
[0015] 权限保存单元,用于对修改后的模块的各权限进行保存;
[0016] 权限值求和单元,用于对选择出的权限进行权限值求和,并将求得的和值保存在预设的对应关系表中,对应关系表具有角色、模块、权限三者间的对应关系;
[0017] 权限值获取单元,用于根据角色获取角色所对应的模块的各权限的权限值;
[0018] 权限值运算单元,用于将模块的各权限的权限值分别与保存在对应关系表中的和值进行按位与运算;
[0019] 权限加载单元,用于在运算后得出的某个值与模块的某个权限的权限值相同时,加载与该权限值对应的模块的权限。
[0020] 利用上述根据本发明的角色权限的动态控制方法及系统,依据2的幂级的特点对用户角色在模块中的各个权限进行赋值,通过权限的选择、结合权限值的按位与的运算,实现实时更改用户角色在模块中的权限的功能。
[0021] 为了实现上述以及相关目的,本发明的一个或多个方面包括后面将详细说明并在权利要求中特别指出的特征。下面的说明以及附图详细说明了本发明的某些示例性方面。然而,这些方面指示的仅仅是可使用本发明的原理的各种方式中的一些方式。此外,本发明旨在包括所有这些方面以及它们的等同物。

附图说明

[0022] 通过参考以下结合附图的说明及权利要求书的内容,并且随着对本发明的更全面理解,本发明的其它目的及结果将更加明白及易于理解。在附图中:
[0023] 图1为根据本发明实施例的角色权限的动态控制方法的流程示意图;
[0024] 图2为根据本发明实施例的角色权限的动态控制系统的逻辑结构示意图。
[0025] 在所有附图中相同的标号指示相似或相应的特征或功能。

具体实施方式

[0026] 以下将结合附图对本发明的具体实施例进行详细描述。
[0027] 针对现有系统中无法对用户角色模块内的权限进行实时更改的问题,本发明利用2的幂级做按位与运算的特点,对用户角色(以下简称为角色)在模块中的权限进行控制。具体原理说明如下:
[0028] 按照2的幂级对角色所在模块中的所有的权限进行赋值,然后,根据需要挑选模块中的权限,将挑选出的权限的权限值进行求和,将模块中各权限的权限值分别与求得的和进行按位与运算,会发现,只有挑选出的权限的权限值与运算后得出的值相等,而未被挑选的权限的权限值会与运算后得出的值不相等,由此来对角色在模块中的权限进行实时更改。
[0029] 图1示出了根据本发明实施例的角色权限的动态控制方法的流程。
[0030] 如图1所示,本发明实施例提供的角色权限的动态控制方法包括两个阶段,分别为角色权限修改阶段和角色权限加载阶段。
[0031] 在角色权限修改阶段包括如下步骤:
[0032] 步骤S11:根据角色获取角色所对应的模块的各权限。
[0033] 只有管理员能够对角色在模块中的权限进行修改,因此,在管理员登录系统后,进入角色模块权限配置页面选择角色,并寻找该角色所在的全部模块,分别获取每个模块的所有权限。例如:模块A包括权限A1和A2,模块B包括权限B1和B2,角色A在模块A中的权限为A1,角色A在模块B中的权限为B1,管理员根据角色A获取到的是模块A的权限A1和A2,以及模块B的权限B1和B2。
[0034] 步骤S12:对模块的各权限进行修改、保存;其中,修改模块的各权限包括:按照2的幂级分别对模块的各权限进行赋值,以及,对模块赋值后的各权限进行选择。
[0035] 此步骤是管理员对角色的权限的修改操作,角色权限为角色所在的每个模块的每个权限,修改之后进行保存,只有保存后修改才会生效。
[0036] 修改角色的权限包括两个方面,一方面,按照2的幂级分别对每个模块的每个权限进行赋值;另一方面,根据系统和业务的实际需求对角色在每个模块中的权限进行选择,上述两个方面在实现时,不分先后顺序。
[0037] 对每个模块的每个权限进行赋值后,将每个模块的每个权限的权限值保存到数据库中,数据库对模块、权限和权限值进行配置。例如:
[0038] ROLE_PERMISSION_ID IS'权限设置编号';
[0039] ROLE_ID'角色编号';
[0040] MODULE_CODE'模块编号';
[0041] PERMISSION_VALUE'角色在模块中的权限值'。
[0042] 在选择模块的权限的过程中,首先加载权限的页面,页面中每个权限都对应有权限选择框,通过权限选择框对权限进行选择。
[0043] S13:对选择出的权限进行权限值求和,并将求得的和值保存在预设的对应关系表中,对应关系表具有角色、模块、权限三者间的对应关系。
[0044] 在每个模块选择出权限后,对选择出的权限的权限值进行求和,将求得的和值保存在预设的对应关系表中,最终,对应关系表中保存有角色所在的每个模块的和值,和值即为角色在模块中选择出的权限的权限值之和。另外对应关系表还保存有角色、权限、模块三者之间的对应关系。也就是说,根据角色查询对应关系表,就能获取该角色在每个模块中的权限的和值。例如:模块A包括权限A1和A2和A3,模块B包括权限B1和B2和B3,管理员选择权限A1和A2作为角色A在模块A中的权限,选择权限B1和B2作为角色A在模块B中的权限,对应关系表中保存的是模块A和模块B的和值,模块A的和值为权限A1的权限值与A2的权限值之和,模块B的和值为权限B1的权限值与B2的权限值之和,根据角色A查询对应关系表,就能得到。
[0045] 需要说明的是,首次加载模块权限的页面时,无需对权限的状态进行判断,而在下一次加载模块权限的页面时,需要对权限的状态进行判断,判断的过程如下:
[0046] 将模块的每个权限的权限值分别与保存在对应关系表中的和值进行按位与运算,在运算后得出的某个值与模块的某个权限的权限值相同时,判断与该权限值对应的模块的权限的状态为已选择,也就是该权限的权限选择框的已被打钩,未打钩的权限选择框表示对应的权限未被选择。
[0047] 判断权限的状态并不会影响管理员对权限的选择,只会便于管理员对权限进行修改。
[0048] 还需要说明的是,在对模块中的权限进行修改时,权限的赋值操作只需进行一次,再次修改模块中的权限时,无需再对权限重新赋值,只需对权限重新进行选择即可,保存后修改后的权限生效。
[0049] 上述步骤S11-S13详细说明了管理员对角色在模块中的权限进行修改的原理。下面对加载修改后的权限的原理进行说明。
[0050] 在角色权限加载阶段包括如下步骤:
[0051] S14:根据角色获取角色所对应的模块的各权限的权限值。
[0052] 角色权限加载阶段的操作者为用户,在用户登录系统后,选择角色,根据角色编号查询数据库中的配置关系,获取与该角色所在的每个模块的每个权限的权限值,并保存到会话中,便于后续操作。
[0053] S15:将模块的各权限的权限值分别与保存在对应关系表中的和值进行按位与运算,在运算后得出的某个值与模块的某个权限的权限值相同时,加载与该权限值对应的模块的权限。
[0054] 将该角色所在的每个模块的每个权限的权限值分别与保存在对应关系表中的和值进行按位与运算,在运算后得出的某个值与模块的某个权限的权限值相同时,加载与该权限值对应的模块的权限,根据2的幂级的特点,在按位与运算后,必然是选择出的权限的权限值与运算后得出的值相同,也就是说,用户只能加载选择出的权限,而被选择的权限无法加载。
[0055] 步骤S14-S15详细说明了用户加载角色权限的原理,结合管理员对角色在模块中的权限进行修改的原理,可以实现访问控制功能。例如:
[0056] 在对数据、功能或菜单项等进行控制的功能前添加模块功能配置,定义该数据、功能或菜单项所需要的权限(定义权限就是对权限进行赋值和选择)。
[0057] 菜单项:根据模块中所配置的菜单权限(为菜单定义的权限值)与用户当前角色在该模块的实际权限(也就是选择出的权限的和值)做位运算;如果结果为该菜单所配置的权限值,用户角色有权加载该菜单,否则无加载该菜单。
[0058] 模块或数据:当用户角色提交的请求到达某功能或数据时,从会话中获取该用户角色在该模块的权限的权限值,并与用户当前角色在该模块的实际权限做按位与运算,如果结果为该功能或数据所定义的权限(实际为相应的权限值),用户角色有权访问此功能或数据,如果结果不是为该功能或数据定义的权限,抛出异常并记录相关操作。
[0059] 为了更清楚地理解角色权限的动态控制方法,将以一个具体示例进行说明。
[0060] 模块A中分别包括权限A、权限B、权限C和权限D四种权限,四种权限分别对应各自的功能或数据。
[0061]权限ID 模块名称 权限名称 权限值
1 模块A 权限A 2
2 模块A 权限B 4
3 模块A 权限C 8
4 模块A 权限D 16
[0062] 第一步:对权限A、权限B、权限C、权限D进行赋值,如表所示。
[0063] 第二步:选择角色A在模块A的权限为:权限B和权限C。
[0064] 第三步:对选择出的权限的权限值求和,角色A在模块A中的权限值之和为4+8=12,将12保存在对应关系表中。
[0065] 当角色A访问权限A所对应的数据或功能时进行权限检查:
[0066] 12&2=(1100)&(0010)=0000=0!=2无访问权限
[0067] 当角色A访问权限B所对应的数据或功能时进行权限检查:
[0068] 12&4=(1100)&(0100)=0100=4=4有访问权限
[0069] 当角色A访问权限C所对应的数据或功能时进行权限检查:
[0070] 12&8=(1100)&(1000)=1000=8=8有访问权限
[0071] 当角色A访问权限D所对应的数据或功能时进行权限检查:
[0072] 12&16=(01100)&(10000)=00000=0!=16无访问权限
[0073] 如果对模块的权限进行修改,在加载权限页面之前,对权限的状态进行判断,判断的过程如上述权限检查的过程,权限页面加载后,权限B和权限C的权限选择框内以打钩,如果关闭权限B只需将对应的权限选择框内的钩去掉即可,如果开启权限A,则在权限A对应的权限选择框内的打钩即可,此时,角色A在模块A中的权限值之和为2+8=10,然后保存。
[0074] 当角色A再次访问权限A所对应的数据或功能时进行权限检查:
[0075] 10&2=(1010)&(0010)=0010=2=2有访问权限
[0076] 当角色A再次访问权限B所对应的数据或功能时进行权限检查:
[0077] 10&4=(1010)&(0100)=0000=0!=4无访问权限
[0078] 当角色A再次访问权限C所对应的数据或功能时进行权限检查:
[0079] 10&8=(1010)&(1000)=1000=8=8有访问权限
[0080] 当角色A再次访问权限D所对应的数据或功能时进行权限检查:
[0081] 10&16=(1010)&(10000)=00000=0!=16无访问权限
[0082] 与上述方法相对应,本发明还提供一种角色权限的动态控制系统,包括权限获取单元1、权限修改单元2、权限保存单元3、权限值求和单元4、权限值获取单元5、权限值运算单元6和权限加载单元7。
[0083] 其中,权限获取单元1用于根据角色获取角色所对应的模块的各权限。
[0084] 权限修改单元2用于对模块的各权限进行修改;其中,权限修改单元2包括权限赋值模块21和权限选择模块22;权限赋值模块21用于按照2的幂级分别对模块的各权限进行赋值,权限选择模块22用于对模块赋值后的各权限进行选择。
[0085] 权限保存单元3用于对修改后的模块的各权限进行保存。
[0086] 权限值求和单元4用于对选择出的权限进行权限值求和,并将求得的和值保存在对应关系表中,对应关系表具有角色、模块、权限三者间的对应关系。
[0087] 权限值获取单元5用于根据角色获取角色所对应的模块的各权限的权限值。
[0088] 权限值运算单元6用于将模块的各权限的权限值分别与保存在对应关系表中的和值进行按位与运算。
[0089] 权限加载单元7用于在运算后得出的某个值与模块的某个权限的权限值相同时,加载与该权限值对应的模块的权限。
[0090] 此外,当权限修改单元2再次对模块的各权限进行修改时,不根据权限赋值模块21重新对模块的各权限进行赋值,而仅根据权限选择模块22重新对模块的各权限进行选择。
[0091] 另外,权限修改单元2还包括权限状态判断模块23,用于在权限选择模块22重新对模块的各权限进行选择之前,对模块的各权限的状态进行判断;其中,将模块的各权限的权限值分别与和值进行按位与运算,在运算后得出的某个值与模块的某个权限的权限值相同时,权限状态判断模块23判断与该权限值对应的模块的权限的状态为已选择。
[0092] 此外,角色权限的动态控制系统还包括权限值保存单元8,用于将权限值求和单元4求得的和值保存到会话中。
[0093] 再者,角色权限的动态控制系统还包括访问权限判断单元9,用于在权限加载单元7加载模块的权限之后,当有请求访问该权限时,判断该请求是否允许访问该权限;其中,访问权限判断单元9包括访问允许模块91和访问拒绝模块92,将权限对应的权限值与保存在会话中的和值进行按位与运算;如果运算后得出的值与权限对应的权限值相同,访问允许模块91允许该请求访问该权限;如果运算后得出的值与权限对应的权限值不相同,访问拒绝模块92拒绝该请求访问该权限。
[0094] 上述内容详细说明了本发明提供的角色权限的动态控制方法及系统,依据2的幂级的特性对用户角色在模块中的各个权限进行赋值,通过权限的选择、结合权限值的按位与的运算,实现实时更改用户角色在模块中的权限的功能。
[0095] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。