一种基于角色功能映射表实现用户权限管理的方法

文档序号:7891056阅读:303来源:国知局
专利名称:一种基于角色功能映射表实现用户权限管理的方法
技术领域
本发明涉及一种基于角色功能映射表实现用户权限管理的方法。
背景技术
一般地,现代人机交互客户端系统中都涉及到了用户权限控制的
功能。对于采用c/s模式的应用系统,即数据处理(定义、查询和更
新)由数据库服务器集中管理而系统应用则由客户机程序实现。在这 种模式下,业务处理逻辑存放于工作站的客户机程序中,由于不同身 份的用户其业务处理逻辑不同,如果单独为每类用户开发与之工作相 对应的应用程序,无疑会将系统开发工作复杂化而延长工程周期,也 不利于以后的维护工作。针对这种情况,在实际开发过程中, 一个业 务部门的客户机程序通常被设计成通用型的(即将所有功能集中于一 身),并将各项功能的选择权限化,通过权限控制为不同身份的用户 赋予与之身份对应的各项操作,屏蔽不能执行的操作调用,以此实现 分工负责。这种实现方式降低了系统开发的复杂度,縮短了开发周期, 同时由于代码相对集中而使维护工作难度降低,所以成为当前开发
c/s系统常用的一种实现方式。采用这种通用模式设计程序,权限控
制就成为系统的运行管理核心,尤其在维护系统安全方面起着重要的
作用,因此权限控制模块的设计(权限控制模块的设计应分为3个方
面权限表结构设计、权限管理机制设计和运行控制机制设计)与实
现就显得极为重要。

发明内容
本发明旨在提供一种基于角色功能映射表实现用户权限管理的方法。
本发明一种基于角色功能映射表实现用户权限管理的方法是 (1)通过将系统功能粗分为模块,然后在每个模块中细分各种 子功能,为模块分配一个唯一的标识符 一个双字节表示的无符号整
数module—id,为模块的子功能分配一个唯一的标识符 一个双字节 表示的无符号整数subfimcjd,最终可将可将模块功能定义为一个4
字节无符号整数
func_id = ( module—id《16 ) | subfunc—id(2) 对每一个定义好的模块功能,定义一个权限字,使用4个字节无符号整数表示。4字节无符号整数具有32个位,每一位代表该模块功能的一个特定的权限,为1或0时,分别代表对此模块功能具备此权限或无此权限;
(3) (模块功能,权限控制字)可定义为描述一个确定权限的权限二元组,多个权限二元组描述了对系统功能的多个权限,从中可以抽象定义出角色的概念角色,即对系统拥有一组权限的操作对象的全体。可在系统中使用4字节无符号整数、名称字符串来标记一个角色,此处使用4字节无符号整数来标识角色。
(4) 定义权限表的行记录为(模块功能id,角色id,权限控制字), 一个角色的权限可由角色id为指定值的多个权限行记录来存储;
(5) 在定义系统用户表时,为每个用户增加一个角色字段定义,当系统中增加用户时,可直接为此用户保存一个指定角色,该用户即可获得角色所携带的系统访问权限;
(6) 用户既可通过角色授予获得角色权限控制规则,也可以保存自己的用户权限控制规则,角色权限控制规则和用户权限控制规则统称为角色功能映射表;
(7) 当用户登录系统时,从存储中加载角色权限控制规则(若存在)和私有的用户权限控制规则(若存在),客户端根据用户具备的权限动态生成功能操作入口,即根据权限来生成界面显示,对于用户不具备权限的功能不提供对应的功能操作入口;当用户在权限范围内操作,引起对其权限范围外的功能调用时,可在发生真正的调用前,再次验证权限是否满足;
采用本发明一种基于角色功能映射表实现用户权限管理的方法后,具有如下几点优点
(1) 将系统功能粗分为模块,然后在模块中细分各种子功能,将"模块+子功能"定义为一个可授权的功能对象,如此定义可以将各功能之间的联系表达清楚,也较容易按照一定的规律扩展新的功能对象,否则只按照增加功能的先后顺序存储,而不进行聚类,则授权时浏览功能定义将会很混乱。
(2) 在可授权的功能对象的定义上,采用4个字节的整数来表达,高位两个字节表达模块ID,低位两个字节表达模块子功能ID,两个字节整数可表达的ID数量较多,基本上可不必担心扩展模块和功能时,ID不足使用的问题。
(3) 在权限控制的定义上,采用4个字节的整数,实际上即采用32个位来表达权限控制的有无,对于模块内的某个子功能而言,设置32种权限控制也是足够的。(4)角色、用户也选择4个字节整数ID表达,将(功能对象ID,角色、用户ID,权限控制字)作为一条行记录值,插入文件或数据库中来形成角色功能映射表。
具体实施例方式
本发明的一个较佳实施例如下1、权限定义方法
(1) 将系统功能粗分为模块,然后在每个模块中细分各种子功能,模块及模块内的子功能定义一种可扩展的表示"模块+子功能",为一个可授权的功能对象,针对该系统允许定义的功能对象,形成一个系统的功能对象集合。具体应用在计算机系统中时,为模块分配一
个唯一的标识符 一个双字节表示的无符号整数module—id,为模块的子功能分配一个唯一的标识符 一个双字节表示的无符号整数
subfunc一id,则模块子功能在全局意义上的功能标识符可使用一个4字节无符号整数来表示funcjd^ (module_i(K< 16) | subfuncjd,由于双字节无符号整数最大^"表示65535,因此可用的模块标识 守和子功能标识符数量较多,基本不用担心不足分配的问题,这也正是本发明的一个优点;
(2) 对每一个定义好的模块功能,定义一个权限字,使用4个字节无符号整数表示。4字节无符号整数具有32个位,每一位代表该模块功能的一个特定的权限,为1或0时,分别代表对此模块功能具备该权限或无权限;
(3) 按照各个用户对系统的使用情况,将用户划分为数个类型的用户群,以形成角色的概念,将(功能对象,角色)二元关系定义为一个可授权对象,为其补充定义各系统权限控制字形成一个(功能对象,角色,权限控制)三元组,以文件或数据库形式保存起来,形成系统访问的一个角色权限控制规则;也可以将(功能对象,用户)二元关系定义为一个可授权对象,为其补充定义各系统权限控制字
(功能对象,用户,权限控制)形成一个三元组,以文件或数据库形式保存起来,形成系统访问的一个用户权限控制规则;
权限控制不是一个简单的子程序模块,而是隐含在整个软件程序框架中的一种服务机制。使用基于"功能-角色"分配算法,对于需要某种操作权限的操作人员,对其记录一条包含了该操作人员的身份标识、功能码以及功能权限控制位集合的数据记录来表达。
例如,权限分组功能码为0x10001,权限集为"查询、新建、修
改、删除、授权",控制位分别为
0x00000001 ,查询 右起第一位
50x000000020x000000040x000000080x00000010
'新建 右起第二位
'修改 右起第三位
'删除 右起第四位
'授权 右起第五位
对于用户0x00000001授予权限分组功能的所有权P艮。
即在数据库中存储形如
0x00000001
0x00010001
0x0000001F
的记录(同理授予其他权限)。2、权限授予过程
(1)首先,在对角色进行授权时,需要将系统内所有的模块功能呈现给操作者供选择使用。为此,可在计算机系统内建立一个三层的树状数据结构,第一层存储系统内共分为多少个模块,相关信息有模块的文字描述和模块的标识Id,第二层按各个模块存储模块内共分为多少个子功能,相关信息有子功能的文字信息表述和子功能在模块内的标识Id,第三层按各个模块子功能存储子功能下共包含多少个权限,相关信息有子功能权限位的文字信息表述和子功能权限位的取值,可以将此树状数据结构显现在人机界面上。
对于一个指定的角色id而言,可使用数据库査询语句select*from RolePopedom where role—id = role—id—value, 从角色权限表中查询得到该角色的所有相关i统子功能f又^,根据模块id、模块子功能id、权限控制位的取值,在人机界面接口处加以显示,具体指当某个权限在其模块子功能对象中记录的权限控制字中对应位被置为1时,则该权限对应的复选框被选中,反之不选中。如下图,假设对于角色id=l的角色,具备模块1中子功能1的权限1:
i----
模,块i—0子功能i

0权限i
口权限2L- 口权限3
I----
口子功能2口子功能3口子功能4
模块2
口子功能l卜-口子功能2口子功能3口子功能4
在人机界面接口处选中某角色进行授权操作时,首先应为该角色加载当前所具有的权限集并显示给操作者。
6(2) 执行授权操作时,通过更改界面上权限复选框的状态,来为被操作的角色增删、修改各个模块的子功能的权限构成。具体指,当某个模块子功能的某个权限对应的复选框被选中,则该权限在其模块子功能对象中记录的权限控制字中对应位被置为1,反之为0,如点击模块ll子功能ll权限1的复选框,取消选择,则计算机系统内与模块ll子功能ll权限1对应的位被清除为0,表示不再具有此权限,这些操作均可通过位域的与或运算完成。当所有界面操作完成后,角色对象中包含的各个模块功能对象的权限控制字的所有位均由对应的人机界面接口设置成功;
(3) 调用数据库的更新语句在角色权限表RolePopedom中对被操作的角色每个模块子功能的权限控制字进行更新;
(4) 系统中增加用户时,可直接为此用户指定角色,即可获得角
色所携带的系统访问权限;
(5) 用户既可以保存自己的用户权限控制规则,也可以通过角色授予获得角色权限控制规则,角色权限控制规则和用户权限控制规则统称为角色功能映射表。
3、权限应用过程
(1)首先,当程序启动时,从授权运行文件中加载完整的权限

'(2)然后,使用具有授权权限的用户登录软件,对其他用户,
按权限授予过程中的方法,通过界面交互选中功能及其对应的权限集,并保存至lj数据库中.
(3)当用户发生i录切换时,若是系统操作员Admin则自动为其附加完整的权限集,否则从数据库中的角色权限表中加载;
(4 )在程序中提供数个权限查询函数验证当前操作员是否具有某功能、某功能的某个子权限的操作权限,这需要一个前提条件是,当前操作员已登录,并已从数据库中的角色权限表中加载各模块子功能的权限控制字。由于权限控制字中不同的权限是按位授予的,因此只要构造待验证子功能的一个只包含待査询权限位的权限控制字,利用计算机系统中按位与的运算方法,与当前操作员加载得到的权限集中该模块子功能的权限控制字按位相与,若结果非0,则表示当前操作员拥有此权限;
(5)在当操作员登录成功后,立即验证权限,设置程序中各操作界面的可见性。一个可行的方法是,为系统中各个操作界面入口(如菜单、工具栏、按钮等)都绑定一个集中了进行该操作所需要权限的
相关子功能的权限控制字,在系统初始化人机界面接口时,使用上(4)中提供的权限査询函数进行权限判断后,根据结果(是否有权限)来设置某些功能人机界面接口的可见性。当运行过程需要动态更新操作界面的可见性时,需要同时考虑是否是权限允许的。
权利要求
1、一种基于角色功能映射表实现用户权限管理的方法,其特征在于(1)通过将系统功能粗分为模块,然后在每个模块中细分各种子功能,为模块分配一个唯一的标识符一个双字节表示的无符号整数module_id;为模块的子功能分配一个唯一的标识符一个双字节表示的无符号整数subfunc_id;最终可将可将模块功能定义为一个4字节无符号整数func_id=(module_id<<16)|subfunc_id(2)对每一个定义好的模块功能,定义一个权限字,使用4个字节无符号整数表示;4字节无符号整数具有32个位,每一位代表该模块功能的一个特定的权限,为1或0时,分别代表对此模块功能具备此权限或无此权限;(3)(模块功能,权限控制字)可定义为描述一个确定权限的权限二元组,多个权限二元组描述了对系统功能的多个权限,从中可以抽象定义出角色的概念角色,即对系统拥有的一组权限的操作对象;可在系统中使用4字节无符号整数、名称字符串来标记一个角色,此处使用4字节无符号整数来标识角色;(4)定义权限表的行记录为(模块功能id,角色id,权限控制字),一个角色的权限可由角色id为指定4字节无符号整数的多个权限行记录来存储;(5)在定义系统用户表时,为每个用户增加一个角色字段定义,当系统中增加用户时,可直接为此用户保存指定角色,该用户即可获得角色所携带的系统访问权限;(6)用户既可通过角色授予获得角色权限控制规则,也可以保存自己的用户权限控制规则,角色权限控制规则和用户权限控制规则统称为角色功能映射表;(7)当用户登录系统时,从存储中加载角色权限控制规则和私有的用户权限控制规则,客户端根据用户具备的权限动态生成功能操作入口,即根据权限来生成界面显示,对于用户不具备权限的功能不提供对应的功能操作入口;当用户在权限范围内操作,引起对其权限范围外的功能调用时,可在发生真正的调用前,再次验证权限是否满足。
全文摘要
本发明公开一种基于角色功能映射表实现用户权限管理的方法,将系统功能粗分为模块,然后在模块中细分各种子功能,将“模块+子功能”定义为一个可授权的功能对象,如此定义可以将各功能之间的联系表达清楚,也较容易按照一定的规律扩展新的功能对象;同时采用4个字节的整数来定义可授权的功能对象,解决了ID不足的问题。
文档编号H04L9/32GK101499906SQ20081007061
公开日2009年8月5日 申请日期2008年2月2日 优先权日2008年2月2日
发明者宜 时, 曹辉标, 杨思超, 谢燕玲, 陈晓冰 申请人:厦门雅迅网络股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1