一种基于角色的用户访问控制方法技术

技术编号:15284045 阅读:87 留言:0更新日期:2017-05-06 12:23
基于角色的用户访问控制RBAC模型的设计思想,提出了一种简化开发过程、方便用户管理权限的方法,并采用Delphi实现其设计。

Role based user access control method

Based on the design idea of role-based user access control (RBAC) model, this paper proposes a method to simplify the development process and to facilitate the management of user permissions, and uses Delphi to implement the design.

【技术实现步骤摘要】

一种基于角色的用户访问控制方法主要是涉及数据库方面领域。
技术介绍
随着企业对信息系统越来越高的期望,传统的访问控制方法DAC(DiscretionaryAccessControl,自主访问控制模型)、MAC(MandatoryAccessControl,强制访问控制模型)已经难以满足复杂的企业环境需求。因此,90年代初美国国家标准化和技术委员会提出了基于角色的访问控制方法,该方法由于实现了用户与访问权限的逻辑分离,更加符合企业的用户、组织、数据和应用特征,而被越来越多的信息系统所使用。基于角色的访问控制方法(RBAC-Role-BasedAccessControl)是目前公认的解决大型企业的统一资源访问控制的有效方法。其显著的两大特征是:1.减小授权管理的复杂性,降低管理开销。2.灵活地支持企业的安全策略,并对企业的变化有更大的伸缩性。
技术实现思路
通过国家专利检索没有发现关于此系统方面的申请资料。本文中使用Delphi作为开发工具来实现。在程序中,建立一个单元文件UFunctions.pas封装权限控制类,在系统登录时调用权限控制模块生成用户界面。此处仅列出主要的实现代码。1.封装权限控制代码(UFunctions.pas)//用户类typeTUser=class(TObject)private_UserID:string;//用户代码_UserName:string;//用户名_PassWord:string;publicconstructorCreate();propertyUserID:stringread_UserID;propertyUserName:stringread_UserName;//登录用户functionLogin(UserID,PassWord:string):Integer;//注销用户procedureLogout;//修改密码functionChangePassWord(OldPassWord,NewPassWord:string):boolean;end;//权限类以下为权限定义部分:typeTFunctions=class(TObject)private//整个菜单数据,功能号和窗体类的关联,用户可用的功能集_cdsAllMenu,_cdsFunc,_cdsUserFunc:TClientDataSet;_User:TUser;//若子菜单有权限显示,必须把相应的父级菜单也显示出来procedureShowParentMenu(varcdsMenu:TClientDataSet;ParentMenuID:Integer);//显示子菜单,被ShowMenu调用procedureShowChildMenu(cdsMenu:TClientDataSet;MenuItem:TMenuItem;MenuID:Integer);//显示菜单主过程procedureShowMenu(cdsMenu:TClientDataSet;Sender:TObject;mnuMain:TMainMenu);//显示工具栏按钮procedureShowToolButton(cdsUserFunc:TClientDataSet;tbMain:TToolBar);//菜单点击动作处理程序procedureMenuClick(Sender:TObject);//根据窗体类名获得窗体类functionGetForm(FormName:string):TForm;//传入窗体类名和窗体显示模式,创建该窗体类的一个实例functionShowForm(FormName,FormModel:string):TForm;functionGetUser:TUser;procedureSetUser(Value:TUser);public//登录用户的一个实例propertyLoginUser:TUserreadGetUserwriteSetUser;//根据功能号执行相应的操作,若失败返回FalsefunctionExeFunc(FuncID:String):Boolean;//检查窗体的组件是否有权限,有则使之可用,否则禁用procedureCheckFormChildFunc(Frm:TForm;FuncID:String);//是否具有某权限functionHasRight(FuncID:String):Boolean;//根据用户代码生成菜单和工具栏procedureShowMenuTool(UserID:String;varmnuMain:TMainMenu;vartbMain:TToolBar;Sender:TObject);//登录系统处理过程functionLogin(UserID,PassWord:string):boolean;end;以下为一些关键的实现代码://根据功能号执行相应的操作,若失败返回FalsefunctionTFunctions.ExeFunc(FuncID:String):Boolean;varFormName,FormModel:string;Frm:TForm;beginresult:=False;_cdsFunc.Filtered:=False;_cdsFunc.Filter:='FuncID='''+FuncID+'''';_cdsFunc.Filtered:=True;//若该功能号不存在if_cdsFunc.IsEmptythenbegin_cdsFunc.Filtered:=False;exit;end;//ififFuncID='1001'then//用户登录,该功能号是系统默认,1001表示的就是‘用户登录’功能。else//打开窗体beginFormName:=_cdsFunc.FieldByName('ControlName').AsString;FormModel:=_cdsFunc.FieldByName('FormModal').AsString;_cdsFunc.Filtered:=False;ifFormName<>''thenbeginFrm:=ShowForm(FormName,FormModel);CheckFormChildFunc(Frm,FuncID);//控制窗体上的组件状态end;end;_cdsFunc.Filtered:=False;result:=True;end;//显示菜单procedureTFunctions.ShowMenu(cdsMenu:TClientDataSet;Sender:TObject;mnuMain:TMainMenu);varnewMenu:TMenuItem;cdsTmp:TClientDataSet;FuncID:Integer;begin….newMenu:=TMenuItem.Create(nil);newMenu.Caption:='【'+cdsTmp.FieldByName('MenuText').AsString+'】';FuncID:=本文档来自技高网...

【技术保护点】
一种基于角色的用户访问控制方法其特征是访问权限与角色相关联,角色再与用户关联,从而实现了用户与访问权限的逻辑分离;人员在系统中总是扮演某种角色的;业务逻辑希望面对的是系统中的角色,而非扮演角色的具体的人。

【技术特征摘要】
1.一种基于角色的用户访问控制方法其特征是访问权限与角色相关联,角色再与用户关联,从而实现了用户与访问权限的逻辑分离;人员在系统中总是扮演某种角色的;业务逻辑希望面对的是系统中的角色,而非扮演角色的具体的人。2.开发人员进行功能定...

【专利技术属性】
技术研发人员:不公告发明人
申请(专利权)人:镇江华扬信息科技有限公司
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1