一种权限管理方法及系统转让专利

申请号 : CN200710123952.2

文献号 : CN101414253B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 黄建蝉

申请人 : 华为技术有限公司

摘要 :

本发明公开了一种权限管理方法,该方法用于在权限管理系统中对用户的操作请求进行校验,所述方法包括:接收用户提出的操作请求;从数据库中获取所述用户所属的角色所分配的权限标识符,所述数据库存储用户、角色及角色所分配的权限标识符的对应关系;从系统中的各权限资源子文件中获取并缓存与所述权限标识符相对应的权限资源,所述各权限资源子文件对应于系统中的各业务逻辑组件模块,所述权限资源子文件存储其所对应的各业务逻辑组件模块的权限资源;拦截用户的操作请求并判断所述用户所分配的权限资源是否包含所述操作请求,是则接受所述操作请求,否则拒绝所述操作请求。同时,本发明还公开了一种权限管理系统。利用本发明提供的方法和系统,本发明满足了系统要细致到每个操作界面的每个操作的权限控制需求,实现了对业务模块权限资源后续开发、维护的便利,同时也可实现用户根据需求对业务模块的灵活定制。

权利要求 :

1.一种权限管理方法,用于在权限管理系统中对用户的操作请求进行校验,其特征在于,所述方法包括:接收用户提出的操作请求;

从数据库中获取所述用户所属的角色所分配的权限标识符,所述数据库存储用户、角色及角色所分配的权限标识符的对应关系;

将各权限资源子文件中存储的权限资源解析到权限资源缓存模块中保存;

根据所述权限标识符从所述权限资源缓存模块中获取并缓存所述用户所分配的权限资源,所述各权限资源子文件对应于所述权限管理系统中的各业务逻辑组件模块,所述权限资源子文件存储其所对应的各业务逻辑组件模块的权限资源;

拦截用户的操作请求并判断所述用户所分配的权限资源是否包含所述操作请求,是则接受所述操作请求,否则拒绝所述操作请求。

2.根据权利要求1所述的方法,其特征在于,所述方法进一步包括:设定用户、角色、权限标识符与权限资源之间的关联关系;

所述设定用户、角色、角色所分配的权限标识符与操作权限资源之间的关联关系具体为:配置所述数据库,所述数据库包括用户表、用户角色表、角色表、角色权限表,所述用户表、用户角色表、角色表、角色权限表提供用户与其所属角色、其所属角色所分配的权限标识符的关系列表;

为所述系统配置至少一个所述权限资源子文件,配置所述各权限资源子文件中存储的权限资源与权限标识符之间的对应关系。

3.根据权利要求1所述的方法,其特征在于,所述从数据库中获取所述用户所属的角色所分配的权限标识符包括:用户成功登录所述权限管理系统后,查询数据库中的用户角色表,获取所述用户所属的角色;

查询数据库中的角色表与角色权限表,获取所述用户所属的角色所分配的权限标识符。

4.一种权限管理系统,用于在权限管理系统中对用户的操作请求进行校验,其特征在于,所述系统包括:用于接收用户提出的操作请求的模块;

用于从数据库中获取所述用户所属的角色所分配的权限标识符的模块,所述数据库存储用户、角色及角色所分配的权限标识符的对应关系;

用于将各权限资源子文件中存储的权限资源解析到权限资源缓存模块中保存的模块;

用于根据所述权限标识符从所述权限资源缓存模块中获取并缓存所述用户所分配的权限资源的模块,所述各权限资源子文件对应于所述权限管理系统中的各业务逻辑组件模块,所述权限资源子文件存储其所对应的各业务逻辑组件模块的权限资源;

用于拦截用户的操作请求并判断所述用户所分配的权限资源是否包含所述操作请求,是则接受所述操作请求,否则拒绝所述操作请求的模块。

5.根据权利要求4所述的权限管理系统,其特征在于,所述数据库包括用户表、用户角色表、角色表、角色权限表,所述用户表、用户角色表、角色表、角色权限表存储用户与其所属角色、其所属角色所分配的权限标识符的关系列表。

6.根据权利要求4所述的权限管理系统,其特征在于,还包括:设定用户、角色、权限标识符与权限资源之间的关联关系的模块,用于:配置所述数据库,所述数据库包括用户表、用户角色表、角色表、角色权限表,所述用户表、用户角色表、角色表、角色权限表提供用户与其所属角色、其所属角色所分配的权限标识符的关系列表;

为所述系统配置至少一个所述权限资源子文件,配置所述各权限资源子文件中存储的权限资源与权限标识符之间的对应关系。

7.根据权利要求4所述的权限管理系统,其特征在于,所述从数据库中获取所述用户所属的角色所分配的权限标识符的模块包括:用于用户成功登录所述权限管理系统后,查询数据库中的用户角色表,获取所述用户所属的角色的模块;

用于查询数据库中的角色表与角色权限表,获取所述用户所属的角色所分配的权限标识符的模块。

说明书 :

一种权限管理方法及系统

技术领域

[0001] 本发明涉及权限系统设计技术领域,更确切地说指一种对用户操作权限进行管理的方法及系统。

背景技术

[0002] 在任何系统中,权限系统的设计是最基础的,经常被使用。权限管理是应用系统的不同用户拥有与其角色相配的对特定几个应用子系统的不同操作权限。权限系统作为各种系统中都需要的一个子系统,具有很广的需求面,无论做什么系统,权限系统对外部系统而言最好做到黑盒的效果,为了减少对外部系统的侵入,在根据业务需求分析的基础上形成权限系统的输入和输出需求。
[0003] 目前最常见的一种权限设计办法,以数据库的设计为中心,如图1所示,数据库包括用户表、角色表、用户角色表、角色权限对照表和权限表,用户表包括三个或以上字段,用以存放系统中各用户的ID(标识符)、用户名及对该用户的描述,其它(如地址、电话等信息);角色表包括三个字段,用以存放系统中所有角色的ID、角色名及对该角色的描述;用户角色表用以记录用户与角色之间的对应关系,一个用户可以隶属于多个角色,一个角色组也可拥有多个用户,包括三个字段,ID,角色ID,用户ID;角色(用户组)权限表用以将具体的许可对象与能够操作它们的角色绑定,即保存特定的角色所分配的权限,包含ID、角色ID以及权限ID;权限表记录需要控制的所有模块的权限资源,例如录入、修改、删除、执行等操作,包含ID和权限名。
[0004] 用户登录时,根据用户角色表将相应的用户与角色关联起来,再根据所属于的角色从角色(用户组)权限表和权限表中读取对应权限,保存在缓存模块Session中,进行鉴权时从Session中读取权限并判断,传统的应用程序通常是在每个具体业务方法前加一个权限判断语句,如果用户具有权限,则让程序通过, 但是这种传统的方案最大问题就是对原有系统产生非常大的侵入,在具体业务里实现判断,判断代码和业务代码混合在一起,导致了原有系统与权限系统形成了非常强的耦合。
[0005] 为了避免跟业务代码的耦合问题,现有很多解决方案通过使用Filter、Interceptor以及AOP(Aspect Oriented Programming,面向方面编程)鉴权来尽量保证不对原有系统的侵入,减少耦合性。
[0006] 上述现有技术虽然使得权限与业务分离,然而,现有系统中所有业务模块的权限控制资源统一存储在权限表中,各模块的权限资源仍然混合在一起,这样造成系统伸缩性和扩展性不足,使用困难的问题依然存在。如果系统需增加新的业务模块,要给新的业务模块在权限表中添加权限控制,这样所添加的新权限资源数据跟原来数据耦合在一起,造成数据不清晰,资源之间的关系不能很好地体现出来,并且加大了开发难度,对维护、修改等工作造成困难;另外,如果系统要细致到每个操作界面的每个操作的权限控制,还是无法做到系统的组件化,对于系统需要删减某个模块或者新增某个模块,无法做到插拔式的方便。 发明内容
[0007] 本发明的目的在于提供一种权限管理方法与系统,克服现有技术中所有业务模块的权限控制资源统一存储在一起造成的系统扩展性和伸缩性不足的缺点。 [0008] 为了实现上述目的,本发明提供如下的技术方案:
[0009] 一种权限管理方法,用于在权限管理系统中对用户的操作请求进行校验,所述方法包括:
[0010] 接收用户提出的操作请求;
[0011] 从数据库中获取所述用户所属的角色所分配的权限标识符,所述数据库存储用户、角色及角色所分配的权限标识符的对应关系;
[0012] 将各权限资源子文件中存储的权限资源解析到权限资源缓存模块中保存;根据所述权限标识符从所述权限资源缓存模块中获取并缓存所述用户所分配的权限资源,所述各权限资源子文件对应于所述权限管理系统中的各业务逻辑组件模块,所述权限资源子文件存储其所对应的各业务逻辑组件模块的权限资源;
[0013] 拦截用户的操作请求并判断所述用户所分配的权限资源是否包含所述操作请求,是则接受所述操作请求,否则拒绝所述操作请求。
[0014] 一种权限管理系统,用于在权限管理系统中对用户的操作请求进行校验,所述系统包括:用于接收用户提出的操作请求的模块;
[0015] 用于从数据库中获取所述用户所属的角色所分配的权限标识符的模块,所述数据库存储用户、角色及角色所分配的权限标识符的对应关系;
[0016] 用于将各权限资源子文件中存储的权限资源解析到权限资源缓存模块中保存的模块;
[0017] 用于根据所述权限标识符从所述权限资源缓存模块中获取并缓存所述用户所分配的权限资源的模块,所述各权限资源子文件对应于所述权限管理系统中的各业务逻辑组件模块,所述权限资源子文件存储其所对应的各业务逻辑组件模块的权限资源; [0018] 用于拦截用户的操作请求并判断所述用户所分配的权限资源是否包含所述操作请求,是则接受所述操作请求,否则拒绝所述操作请求的模块。
[0019] 由于采用了上述方案,本发明满足了系统要细致到每个操作界面的每个操作的权限控制需求,实现了对业务模块权限资源后续开发、维护的便利,同时也可实现用户根据需求对业务模块的灵活定制。
[0020] 附图说明
[0021] 图1是现有权限系统中数据库的组成示意图;
[0022] 图2是本发明所提供的系统实施例一的组成示意图;
[0023] 图3是本发明所提供的系统实施例二的组成示意图;
[0024] 图4是利用图2所提供系统实施例进行权限管理的方法实施例一的工作流程图; [0025] 图5是利用图3所提供系统实施例进行权限管理的方法实施例二的工作流程图。 具体实施方式
[0026] 软件功能组件化设计,组件化开发是模块化软件开发中架构设计、开发、测试与公用组件部署等各个环节的技术延伸,这些组件通过组装可以实现产品的有效重用与扩展,减少系统运行粒度,提高运行效率,并易于软件分布式开发和功能升级;在统一的系统组件注册表的维护下,可以很容易地按照客户需求进行定制和开发新的组件,伸缩性强。 [0027] 为实现本发明系统组件化的目的,本发明的实施例主要采用了AOP鉴权与资源模块细分结合的技术方案。
[0028] AOP,面向方面编程,是针对业务处理过程中的横切面进行提取,通过切面,将系统中各个不同层次上的问题隔离开来,实现统一集约式处理,各切面只需集中于自己领域内的逻辑实现。本发明中通过AOP技术把权限横向关注点从业务逻辑模块中分离出来,实现了一个通用的权限校验模块,在这层切面上进行统一的集中式权限管理,通过AOP技术,一方面使得开发逻辑更加清晰,专业化分工更加易于进行;另一方面,由于切面的隔离,降低了耦合性,为组件化打好基础。
[0029] 资源模块细分,即根据各个业务模块划分生成各自的权限资源文件,每个业务模块对应一个权限资源文件,文件采用如XML、CSV、INI、TXT等类型文件。该权限资源文件随着业务模块的存在而存在,如果系统需要添加新的业务模块,那么针对该业务模块的权限控制需要新增一个权限资源文件,如果该业务模块从系统中删除,那么对应的资源文件就应该移除,由此,不需要采用任何代码即实现了权限系统的组件化。与组件化的系统相对应,各业务模块即可称为业务组件。
[0030] 下面参照附图对本发明的实施例进行详细地说明。
[0031] 基于上述实现本发明的基本技术手段,本发明实施例提供的权限管理系统包括权限校验模块、权限资源文件模块、数据库以及业务逻辑组件模块,权限校验模块用以拦截用户发送的对业务逻辑组件模块进行操作的请求,查询数据库以及权限资源文件模块,获取并存储用户所分配的权限资源,校验用户是否具有所请求的权限;权限资源文件模块包括至少一个权限资源子文件模块,用以存储各个业务逻辑组件模块的权限资源文件;数据库存储用户、角色及权限的关系列表;业务逻辑组件模块,用以实现产品的各项业务逻辑功能。
[0032] 如图2所示,为本发明所提供的系统实施例一的组成示意图,该系统包括AOP权限校验模块2、数据库4、权限资源子文件模块61、62、63及业务逻辑组建模块8。AOP权限校验模块2包括用户权限缓存模块21和权限校验模块22,用户权限缓存模块21可以从数据库4和权限资源子文件模块中读取数据,获得用户所对应的权限并存储,本实施例中采用session;权限校验模块22用以拦截用户向业务逻辑组件模块8发送的操作请求,从用户权限缓存模块21中读取用户所对应的权限,对用户权限进行校验;数据库4存储有用户表、角色表、用户角色表与角色权限表,用户表中存储用户ID与用户名的关联关系,角色表中存储角色ID与角色名的关联关系,用户角色表将用户与角色关联起来,角色权限表中存储各角色与其被分配的权限标识符的关联关系;权限资源文件模块61、62、63以文件的形式存储业务逻辑组件8的权限资源,每一个权限资源子文件对应存储业务逻辑组件模块8中的一个业务逻辑组件的权限资源,同时,权限资源文件模块6与数据库4中的角色权限表中的权限标识符保持对应关系的关联,所述各权限资源子文件中存储的权限资源与权限标识符之间的对应关系,所述权限标识符指示各权限资源子文件中存储的一种权限资源,相应于图2所示的业务逻辑组件模块8包括三个子业务组件模块,本实施例中权限资源文件模块6包括三个权限资源文件子文件。
[0033] 如图3所示,为本发明所提供的系统实施例二的组成示意图,该实施例与实施例一不同之处在于,系统除包括AOP权限校验模块2、数据库权4、限资源模 块6以及业务逻辑组件模块8外,还增加了一个权限资源缓存模块10,该权限资源缓存模块10,用以保存权限资源信息,系统启动时,权限资源文件模块6中的信息即被加载到该权限资源缓存模块10中,查询数据时,用户权限缓存模块21不再直接从权限资源文件模块6中读取数据,而是从权限资源缓存模块10中读取缓存在其中的权限资源数据;角色权限表也不再直接与权限资源文件模块6保持双向互通,而是直接与权限资源缓存模块10保持连接,实时保持权限标识符与权限资源的对应关系,本实施例中权限资源缓存模块10为Cache。通过增加权限资源缓存模块10,在系统启动时,即将每个业务模块的权限资源信息加载到其中,避免了鉴别用户权限时候每次都从文件读取信息,加快了系统的响应速度。
[0034] 利用上述系统实施例,本发明还提供一种权限管理的方法的实施例,如图4所示,为利用系统实施例一进行权限管理的方法实施例一的具体工作流程图,本方法实施例一包括以下步骤:
[0035] 步骤401:用户登录,权限系统验证用户密码是否通过,验证通过的用户进入系统;
[0036] 步骤402:用户登录后,用户权限缓存模块查询数据库中的用户角色表,读取用户对应的角色;
[0037] 步骤403:用户权限缓存模块查询数据库中的角色权限表,根据用户的角色读取用户所分配权限的权限标识符;
[0038] 步骤404:用户权限缓存模块查询权限资源子文件模块,根据权限标识符读取该用户的权限资源并将权限资源保存在用户权限缓存模块中;
[0039] 步骤405:用户发送对业务组件进行操作的请求;
[0040] 步骤406:权限校验模块拦截用户请求,从用户权限缓存模块中读取该用户所分配的权限资源,并判断用户所分配的权限是否包含该用户所请求的权限,是则进入步骤407,否则结束访问;
[0041] 步骤407:权限校验通过,权限校验模块调用业务逻辑组件模块,用户获得所请求的资源的操作权限。
[0042] 如图5所示,为利用系统实施例二所提供系统进行权限管理的方法的实施例二的具体工作流程图,本方法实施例二包括以下步骤:
[0043] 步骤501:系统启动时,将权限资源文件模块中的权限静态资源解析到权限资源缓存模块中保存;
[0044] 步骤502:用户登录,系统验证用户密码是否通过,验证通过的用户进入系统; [0045] 步骤503:用户登录后,用户权限缓存模块查询数据库中的用户角色表,读取用户对应的角色;
[0046] 步骤504:用户权限缓存模块查询数据库中的角色表与角色权限表,根据用户的角色读取用户所分配权限的标识符;
[0047] 步骤505:用户权限缓存模块查询权限资源缓存模块,根据权限标识符读取该用户的权限资源并将权限资源保存在用户权限缓存模块中;
[0048] 步骤506:用户发送对业务组件进行操作的请求;
[0049] 步骤507:权限校验模块拦截用户请求,从用户权限缓存模块中读取该用户所分配的权限资源,并判断用户所分配的权限是否包含该用户所请求的权限,是则进入步骤508,否则结束访问;
[0050] 步骤508:权限校验通过,权限校验模块调用业务逻辑组件模块,用户获得所请求的资源的操作权限。
[0051] 需要说明的是,上述本发明的方法实施例,可以以计算机语言写成并执行,而该由计算机语言所写成的软件程序可以存储在任何微处理单元可以辨识、解读的记录介质中,或者存储在包含有记录介质的物品或装置中。由于本发明的权限管理方法已清楚完整地揭露,任何熟悉计算机语言者阅读本发明说明书即知如何撰写软件程序,故有关软件程序细节部分在此不再赘述。
[0052] 实施上述实施例,各业务逻辑组件模块都有自己单独的权限资源文件,使得系统中的权限与权限进行分离,业务逻辑组件模块的新增和移除,都无需动用源代码,权限控制都可以灵活控制,后续的维护、修改可以很容易地进行, 并且可以按照客户需求进行定制和开发新的业务模块,伸缩性强。另外,各业务模块的权限资源单独存放,实现系统的组件化,对于系统业务模块的新增和移除,做到了插拔式的方便。
[0053] 其次,权限资源采用文件存储方式,大大降低调用者的使用难度,用户只需要在按要求生成权限资源文件,并且提供了极大的可扩展性和可控制性。
[0054] 另外,在服务启动时候,即将每个业务模块的权限资源信息加载到其中,避免了鉴别用户权限时候每次都从文件读取信息,加快了系统的响应速度。
[0055] 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。