用戶權限管理設計方案_第1頁
用戶權限管理設計方案_第2頁
用戶權限管理設計方案_第3頁
用戶權限管理設計方案_第4頁
用戶權限管理設計方案_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

用戶權限管理設計方案用戶認證管理設計方案1設計思路為了設計一套具有較強可擴展性的用戶認證管理,需要建立用戶、角色和權限等數(shù)據(jù)庫表,并且建立之間的關系,具體實現(xiàn)如下。1.1用戶用戶僅僅是純粹的用戶,用來記錄用戶相關信息,如用戶名、密碼等,權限是被分離出去了的。用戶(User)要擁有對某種資源的權限,必須通過角色(Role)去關聯(lián).用戶通常具有以下屬性:編號,在系統(tǒng)中唯一.名稱,在系統(tǒng)中唯一。用戶口令。注釋,描述用戶或角色的信息。?編號,在系統(tǒng)中唯一.名稱,在系統(tǒng)中唯一。用戶口令。注釋,描述用戶或角色的信息。???1.2角色a.■號,角色是使用權限的基本單位,擁有一定數(shù)量的權限,通過角色賦予用戶a.■號,編號,在系統(tǒng)中唯一。名稱,在系統(tǒng)中唯一。注釋,描述角色信息1.3權限權限指用戶根據(jù)角色獲得對程序某些功能的操作,例如對文件的讀、寫、修改和刪除功能,通常具有以下屬性:?編號,在系統(tǒng)中唯一。?名稱,在系統(tǒng)中唯一。?注釋,描述權限信息1.4用戶與角色的關系一個用戶(User)可以隸屬于多個角色(Role),一個角色組也可擁有多個用戶,用戶角色就是用來描述他們之間隸屬關系的對象。用戶(User)通過角色(Role)關聯(lián)所擁有對某種資源的權限,例如?用戶(User):UserIDUserNameUserPwd

1張三xxxxxx2李四xxxxxx角色(Role):RolelDRoleNameRoleNote01系統(tǒng)管理員監(jiān)控系統(tǒng)維護管理員02監(jiān)控人員在線監(jiān)控人員03調(diào)度人員調(diào)度工作人員04一般工作人員工作人員?用戶角色(User_Role):UserRoleIDUserIDRoleIDUserRoleNote1101用戶“張三”被分配到角色“系統(tǒng)管理員”2202用戶“李四”被分配到角色“監(jiān)控人員”3203用戶“李四”被分配到角色“調(diào)度人員〃從該關系表可以看出,用戶所擁有的特定資源可以通過用戶角色來關聯(lián)。1.5權限與角色的關系一個角色(Role)可以擁有多個權限(Permission),同樣一個權限可分配給多個角色。例如:?角色(Role):RoleIDRoleNameRoleNote01系統(tǒng)管理員監(jiān)控系統(tǒng)維護管理員02監(jiān)控人員在線監(jiān)控人員03調(diào)度人員調(diào)度工作人員04一般工作人員工作人員?權限(Permission):PermissionIDPermissionNamePermissionNote0001增加監(jiān)控允許增加監(jiān)控對象0002修改監(jiān)控允許修改監(jiān)控對象0003刪除監(jiān)控允許刪除監(jiān)控對象0004察看監(jiān)控信息允許察看監(jiān)控對象?角色權限(Role_Permission):RolePermissionlDRolelDPermissionlDRolePermissionNote1010001角色“系統(tǒng)管理員”具有權限“增加監(jiān)控〃2010002角色“系統(tǒng)管理員〃具有權限“修改監(jiān)控”3010003角色“系統(tǒng)管理員”具有權限“刪除監(jiān)控”4010004角色“系統(tǒng)管理員”具有權限“察看監(jiān)控”5020001角色“監(jiān)控人員”具有權限“增加監(jiān)控”6020004角色“監(jiān)控人員”具有權限“察看監(jiān)控〃由以上例子中的角色權限關系可以看出,角色權限可以建立角色和權限之間的對應關系。1。6建立用戶權限用戶權限系統(tǒng)的核心由以下三部分構成:創(chuàng)造權限、分配權限和使用權限。第一步由Creator創(chuàng)造權限(Permission),Creator在設計和實現(xiàn)系統(tǒng)時會劃分。利用存儲過程CreatePermissionInfo(@PermissionName,@PermissionNote)創(chuàng)建權限信息,指定系統(tǒng)模塊具有哪些權限。第二步由系統(tǒng)管理員(Administrator)創(chuàng)建用戶和角色,并且指定用戶角色(User—Role)和角色權限(Role—Permission)的關聯(lián)關系。Administrator具有創(chuàng)建用戶、修改用戶和刪除用戶的功能:存儲過程CreateUserInfo(@UserName,@UserPwd)創(chuàng)建用戶信息;存儲過程ModifyUserInfo(@UserName,@UserPwd)修改用戶信息;存儲過程DeleteUserInfo(@UserID)刪除用戶信息;Administrator具有創(chuàng)建角色和刪除角色的功能:存儲過程CreateRoleInfo(@RoleName,@RoleNote)創(chuàng)建角色信息;存儲過程DeleteRoleInfo(@RoleID)刪除角色信息;3)Administrator具有建立用戶和角色、角色和權限的關聯(lián)關系功能:存儲過程GrantUserRole(@UserID,@RoleID,@UserRoleNote)建立用戶和角色的關聯(lián)關系;存儲過程DeleteUserRole(@UserRoleID)刪除用戶和角色的關聯(lián)關系;?存儲過程GrantRolePermission(@RoleID,@PermissionID,@RolePermissionNote)建立角色和權限的關聯(lián)關系;存儲過程DeleteRolePermission(@RolePermissionID)刪除角色和權限的關聯(lián)關系;第三步用戶(User)使用Administrator分配給的權限去使用各個系統(tǒng)模塊.利用存儲過程GetUserRole(@UserID,@UserRoleIDoutput),GetRolePermission(@RoleID,@Role--PermissinIDoutput)獲得用戶對模塊的使用權限。1。7用戶認證實現(xiàn)當用戶通過驗證后,由系統(tǒng)自動生成一個128位的TicketID保存到用戶數(shù)據(jù)庫表中,建立存儲過程Login(@UserID,@UserPwd,@TicketIDoutput)進行用戶認證,認證通過得到一個TicketID,否則TicketID為null。其流程圖如下:圖1Login流程圖得到TicketID后,客戶端在調(diào)用服務端方法時傳遞TicketID,通過存儲過程JudgeTicketPermission(@TicketID,@PermissionID)判斷TicketID對應的用戶所具有的權限,并根據(jù)其權限進行方法調(diào)用。當用戶退出系統(tǒng)時,建立存儲過程Logout(@UserID)來退出系統(tǒng).當用戶異常退出系統(tǒng)時,根據(jù)最后的登陸時間(LastSignTime)確定用戶的TickeID,建立存儲過程ExceptionLogout(@UserID,@LastSignTime)處理用戶的異常退出。_圖2Logout流程圖WebService可以采用SoapHeader中寫入TicketID來使得TicketID從客戶端傳遞給服務端。。NetRemoting可以采用CallContext類來實現(xiàn)TicketID從客戶端傳遞給服務端。2數(shù)據(jù)庫設計2.1數(shù)據(jù)庫表圖3數(shù)據(jù)庫關系圖2.2數(shù)據(jù)庫表說明2.2.1用戶表(Static_User)Static_UserStatic_User字段名詳細解釋類型備注UserID路線編號varchar(20)PKUserName用戶名稱varchar(20)UserPwd用戶密碼varchar(20)LastSignTime最后登陸時間datatimeSignState用戶登陸狀態(tài)標記intTickeID驗證票記錄編號varchar(128)

2.2。2角色表(Static_Role)Static_RoleStatic_User字段名詳細解釋類型備注RolelD角色編號varchar(20)PKRoleName角色名稱varchar(20)RoleNote角色信息描述varchar(20)2.2。3用戶一角色表(Static_User_Role)Static_User_RoleStatic_User字段名詳細解釋類型備注UserRoleID用戶角色編號varchar(20)PKUserID用戶編號varchar(20)FKRoleID角色編號varchar(20)FKUserRoleNote用戶角色信息描述varchar(20)2。2.4權限表(Static_Permission)Static_PermissionStatic_User字段名詳細解釋類型備注PermissionID編號varchar(20)PKPermissionName權限名稱varchar(20)PermissionNote全息信息描述varchar(20)2。2.5角色一權限表(Static_Role_Permission)Static_Role_PermissionStatic_User字段名詳細解釋類型備注RolePermissionID角色權限編號varchar(20)PKRoleID角色編號varchar(20)FKPermissionID權限編號varchar(20)FKRolePermissionNote角色權限信息描述varchar(20)3?ne技術概要3。1WebServiceSoapHeader對SQL數(shù)據(jù)庫執(zhí)行自定義身份驗證和授權。在這種情況中,應向服務傳遞自定義憑據(jù)(如用戶名和密碼),并讓服務自己處理身份驗證和授權。將額外的信息連同請求一起傳遞給XMLWeb服務的簡便方法是通過SOAP標頭.為此,需要在服務中定義一個從SOAPHeader派生的類,然后將服務的公共字段聲明為該類型。這在服務的公共合同中公開,并且當從WebServiceUtil。exe創(chuàng)建代理時可由客戶端使用,如下例所示:usingSystem.Web。Services;usingSystem.Web.Services。Protocols;//AuthHeaderclassextendsfromSoapHeaderpublicclassAuthHeader:SoapHeader{publicstringUsername;publicstringPassword;}publicclassHeaderService:WebService{publicAuthHeadersHeader;}服務中的每個WebMethod都可以使用SoapHeader自定義屬性定義一組關聯(lián)的標頭.默認情況下,標頭是必需的,但也可以定義可選標頭。SoapHeader屬性指定公共字段的名稱或者Client或Server類的屬性(本標題中稱為Headers屬性)。在為輸入標頭調(diào)用方法前,WebService設置Headers屬性的值;而當方法為輸出標頭返回時,WebService檢索該值。[WebMethod(Description="Thismethodrequiresacustomsoapheadersetbythecaller”)][SoapHeader("sHeader〃)]publicstringSecureMethod(){if(sHeader==nullreturn"ERROR:Pleasesupplycredentials";elsereturn"USER:"+sHeader.Username;}然后,客戶端在調(diào)用要求標頭的方法之前,直接在代理類上設置標頭,如下面的示例所示:HeaderServiceh=newHeaderService();AuthHeadermyHeader=newAuthHeader();myHeaderoUsername="username”;myHeader。Password="password”;h.AuthHeader=myHeader;Stringresult=h。SecureMethod();3o2oNetRemoting的安全認證方式CallContext提供與執(zhí)行代碼路徑一起傳送的屬性集,CallContext是類似于方法調(diào)用的線程本地存儲的專用集合對象,并提供對每個邏輯執(zhí)行線程都唯一的數(shù)據(jù)槽。數(shù)據(jù)槽不在其他邏輯線程上的調(diào)用上下文之間共享。當CallContext沿執(zhí)行代碼路徑往返傳播并且由該路徑中的各個對象檢查時,可將對象添加到其中。當對另一個AppDomain中的對象進行遠程方法調(diào)用時,CallContext類將生成一個與該遠程調(diào)用一起傳播的LogicalCallContext實例。只有公開ILogicalThreadAffinative接口并存儲在CallContext中的對象被在LogicalCallContext中傳播到AppDomain外部。不支持此接口的對象不在LogicalCallContext實例中與遠程方法調(diào)用一起傳輸。CallContextoSetData方法存儲給定對象并將其與指定名稱關聯(lián),CallContext。GetData方法從CallContext中檢索具有指定名稱的對象。下面的代碼示例說明如何使用SetData方法將主體和標識對象傳輸?shù)竭h程位置以進行標識。publicclassClientClass{publicstaticvoidMain(){Genericidentityident=newGenericidentity("Bob”);GenericPrincipalprpal=newGenericPrincipal(ident,Newstring口{”Level1"});LogicalCallContextDatadata=newLogicalCallContextData(prpal);//EnterdataintotheCallContextCallContext.SetData("testdata”,data);Console.WriteLine(data.numOfAccesses);ChannelServices°RegisterChannel(newTcpChannel());RemotingConfiguration.RegisterActivatedClientType(typeof(HelloServiceClass),"tcp://localhost:8082”);HelloServiceClassservice=newHelloServiceClass();if(service==null){Console.WriteLine("Couldnotlocateserveroreturn;}//callremotemethodConsole。WriteLine();Console。WriteLine("Callingremoteobject");Console.WriteLine(service.HelloMethod("Caveman"));Console.WriteLine(service。HelloMethod("Spaceman〃));Console。WriteLine(service。HelloMethod("Bob"));Console。WriteLine("Finishedremoteobjectcall");Console.WriteLine();//ExtractthereturneddatafromthecallcontextLogicalCallContextDatareturnedData=(LogicalCallContextData)CallContext。GetData("testdata");Console。WriteLine(data.numOfAccesses);Console.WriteLine(returnedData。numOfAccesses);}}下面的代碼示例說明如何使用GetData方法將主體和標識對象傳輸?shù)竭h程位置以進行標識.usingSystem;usingSystem。Text;usingSystem.Runtime.Remoting.Messaging;usingSystem。Security。Principal;publicclassHelloServiceClass:MarshalByRefObject{staticintn_instances;intinstanceNum;publicHelloServiceClass(){n_instances++;instanceNum=n_instances;Console。WriteLine(thisoGetType()。Name+"hasbeencreated.Instance#={0}”,instanceNum);}?HelloServiceClass(){Console。WriteLine("Destroyedinstance{0}ofHelloServiceClasso”,instanceNum);}publicStringHelloMethod(Stringname){

//ExtractthecallcontextdataLogicalCallContextDatadata=(LogicalCallContextData)CallContext.GetData("testdata”);IPrincipalmyPrincipal=data。Principal;//Checktheuseridentityif(myPrincipaloIdentity。Name=="Bob”){Console。WriteLine("\nHello{0},youareidentified!",myPrincipaloIdentity.Name);ConsoleoWriteLine(data.numOfAccesses);}else{ConsoleoWriteLine("Goaway!Youarenotidentified!”);returnString。Empty;}//calculateandreturnresulttoclientreturn”Hithere"+name4詳細代碼設計

4.1WebService代碼設計//calculateandreturnresulttoclientWebService端代碼主要進行對數(shù)據(jù)庫的操作,建立起Client操作數(shù)據(jù)庫所需要的方法,供Client的端調(diào)用.classUserInfoMng()用戶信息管理類,其中包括方法:CreateUserInfo(stringUserNamestringUserPwd)建立用戶信息,調(diào)用存儲過程CreateUserInfo(@UserName,@UserPwd)ModifyUserInfoCstringUserNamestringUserPwd)修改用戶信息,調(diào)用存儲過程ModifyUserInfo(@UserName,@UserPwd)DeleteUserInfo()刪除用戶信息,調(diào)用存儲過程DeleteUserInfo(@UserID)2)classUserAuthentication()用戶認證類,用來實現(xiàn)用戶角色、權限的設置,包括方法:CreatePermissionInfo(stringPermissionNamestringPermissi--onNote)建立權限信息,調(diào)用存儲過程CreatePermissionInfo(@PermissionName,@PermissionNote)CreateRoleInfo(stringRoleNamestringRoleNote)建立角色信息,調(diào)用存儲過程CreateRoleInfo(@RoleName,@RoleNote)DeleteRoleInfo()刪除角色信息,調(diào)用存儲過程DeleteRoleInfo(@RoleID)

?GrantUserRole(stringUserIDstringRolelDstringUserRoleNote)授予用戶角色,調(diào)用存儲過程GrantUserRole(@UserID,@RoleID,@UserRoleNote)DeleteUserRole()刪除用戶角色,調(diào)用存儲過程DeleteUserRole(@UserRoleID)GrantRolePermission(stringRolelDstringPermissionlDstringRolePermissionNote

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論