版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、用戶認證管理設(shè)計方案1 設(shè)計思路為了設(shè)計一套具有較強可擴展性的用戶認證管理,需要建立用戶、角色和權(quán)限等數(shù)據(jù)庫表,并且建立之間的關(guān)系,具體實現(xiàn)如下。1.1 用戶用戶僅僅是純粹的用戶,用來記錄用戶相關(guān)信息,如用戶名、密碼等,權(quán)限是被分離出去了的。用戶(User)要擁有對某種資源的權(quán)限,必須通過角色(Role)去關(guān)聯(lián)。用戶通常具有以下屬性: 編號,在系統(tǒng)中唯一。 名稱,在系統(tǒng)中唯一。 用戶口令。 注釋,描述用戶或角色的信息。1.2 角色角色是使用權(quán)限的基本單位,擁有一定數(shù)量的權(quán)限,通過角色賦予用戶權(quán)限,通常具有以下屬性: 編號,在系統(tǒng)中唯一。 名稱,在系統(tǒng)中唯一。 注釋,描述角色信息1.3 權(quán)限 權(quán)
2、限指用戶根據(jù)角色獲得對程序某些功能的操作,例如對文件的讀、寫、修改和刪除功能,通常具有以下屬性: 編號,在系統(tǒng)中唯一。 名稱,在系統(tǒng)中唯一。 注釋,描述權(quán)限信息1.4 用戶與角色的關(guān)系一個用戶(User)可以隸屬于多個角色(Role),一個角色組也可擁有多個用戶,用戶角色就是用來描述他們之間隸屬關(guān)系的對象。用戶(User)通過角色(Role)關(guān)聯(lián)所擁有對某種資源的權(quán)限,例如l 用戶(User):UserID UserName UserPwd1 張三 xxxxxx2 李四 xxxxxx l 角色(Role):RoleID RoleName RoleNote 01 系統(tǒng)管理員 監(jiān)控系統(tǒng)維護管理員
3、02 監(jiān)控人員 在線監(jiān)控人員 03 調(diào)度人員 調(diào)度工作人員 04 一般工作人員 工作人員 l 用戶角色(User_Role):UserRoleID UserID RoleID UserRoleNote1 1 01 用戶“張三”被分配到角色“系統(tǒng)管理員”2 2 02 用戶“李四”被分配到角色“監(jiān)控人員”3 2 03 用戶“李四”被分配到角色“調(diào)度人員” 從該關(guān)系表可以看出,用戶所擁有的特定資源可以通過用戶角色來關(guān)聯(lián)。1.5 權(quán)限與角色的關(guān)系一個角色(Role)可以擁有多個權(quán)限(Permission),同樣一個權(quán)限可分配給多個角色。例如:l 角色(Role):RoleID RoleName Rol
4、eNote 01 系統(tǒng)管理員 監(jiān)控系統(tǒng)維護管理員 02 監(jiān)控人員 在線監(jiān)控人員 03 調(diào)度人員 調(diào)度工作人員 04 一般工作人員 工作人員 l 權(quán)限(Permission):PermissionID PermissionName PermissionNote0001 增加監(jiān)控 允許增加監(jiān)控對象0002 修改監(jiān)控 允許修改監(jiān)控對象0003 刪除監(jiān)控 允許刪除監(jiān)控對象0004 察看監(jiān)控信息 允許察看監(jiān)控對象l 角色權(quán)限(Role_Permission):RolePermissionID RoleID PermissionID RolePermissionNote1 01 0001 角色“系統(tǒng)管理員
5、”具有權(quán)限“增加監(jiān)控”2 01 0002 角色“系統(tǒng)管理員”具有權(quán)限“修改監(jiān)控”3 01 0003 角色“系統(tǒng)管理員”具有權(quán)限“刪除監(jiān)控”4 01 0004 角色“系統(tǒng)管理員”具有權(quán)限“察看監(jiān)控”5 02 0001 角色“監(jiān)控人員”具有權(quán)限“增加監(jiān)控”6 02 0004 角色“監(jiān)控人員”具有權(quán)限“察看監(jiān)控” 由以上例子中的角色權(quán)限關(guān)系可以看出,角色權(quán)限可以建立角色和權(quán)限之間的對應關(guān)系。1.6 建立用戶權(quán)限用戶權(quán)限系統(tǒng)的核心由以下三部分構(gòu)成:創(chuàng)造權(quán)限、分配權(quán)限和使用權(quán)限。第一步由Creator創(chuàng)造權(quán)限(Permission),Creator在設(shè)計和實現(xiàn)系統(tǒng)時會劃分。利用存儲過程CreatePer
6、missionInfo(PermissionName,PermissionNote)創(chuàng)建權(quán)限信息,指定系統(tǒng)模塊具有哪些權(quán)限。第二步由系統(tǒng)管理員(Administrator)創(chuàng)建用戶和角色,并且指定用戶角色(UserRole)和角色權(quán)限(RolePermission)的關(guān)聯(lián)關(guān)系。1) Administrator具有創(chuàng)建用戶、修改用戶和刪除用戶的功能:l 存儲過程CreateUserInfo(UserName,UserPwd)創(chuàng)建用戶信息;l 存儲過程ModifyUserInfo(UserName,UserPwd)修改用戶信息;l 存儲過程DeleteUserInfo(UserID)刪除用戶信息;
7、2) Administrator具有創(chuàng)建角色和刪除角色的功能:l 存儲過程CreateRoleInfo(RoleName,RoleNote)創(chuàng)建角色信息;l 存儲過程DeleteRoleInfo(RoleID)刪除角色信息;3)Administrator具有建立用戶和角色、角色和權(quán)限的關(guān)聯(lián)關(guān)系功能:l 存儲過程GrantUserRole(UserID,RoleID,UserRoleNote)建立用戶和角色的關(guān)聯(lián)關(guān)系;l 存儲過程DeleteUserRole(UserRoleID)刪除用戶和角色的關(guān)聯(lián)關(guān)系;l 存儲過程GrantRolePermission(RoleID,PermissionID
8、,RolePermissionNote)建立角色和權(quán)限的關(guān)聯(lián)關(guān)系;l 存儲過程DeleteRolePermission(RolePermissionID)刪除角色和權(quán)限的關(guān)聯(lián)關(guān)系;第三步用戶(User)使用Administrator分配給的權(quán)限去使用各個系統(tǒng)模塊。利用存儲過程GetUserRole(UserID, UserRoleID output),GetRolePermission(RoleID,Role-PermissinID output)獲得用戶對模塊的使用權(quán)限。1.7 用戶認證實現(xiàn)當用戶通過驗證后,由系統(tǒng)自動生成一個128位的TicketID保存到用戶數(shù)據(jù)庫表中,建立存儲過程Log
9、in(UserID,UserPwd,TicketID output)進行用戶認證,認證通過得到一個TicketID,否則TicketID為null。其流程圖如下:圖1 Login流程圖得到TicketID后,客戶端在調(diào)用服務端方法時傳遞TicketID,通過存儲過程JudgeTicketPermission(TicketID,PermissionID)判斷TicketID對應的用戶所具有的權(quán)限,并根據(jù)其權(quán)限進行方法調(diào)用。當用戶退出系統(tǒng)時,建立存儲過程Logout(UserID)來退出系統(tǒng)。當用戶異常退出系統(tǒng)時,根據(jù)最后的登陸時間(LastSignTime)確定用戶的TickeID,建立存儲過程
10、ExceptionLogout(UserID,LastSignTime)處理用戶的異常退出。圖2 Logout流程圖WebService可以采用SoapHeader中寫入TicketID來使得TicketID從客戶端傳遞給服務端。.Net Remoting可以采用CallContext類來實現(xiàn)TicketID從客戶端傳遞給服務端。2 數(shù)據(jù)庫設(shè)計2.1 數(shù)據(jù)庫表圖3 數(shù)據(jù)庫關(guān)系圖2.2 數(shù)據(jù)庫表說明2.2.1 用戶表(Static_User)Static_UserStatic_User字段名詳細解釋類型備注UserID路線編號varchar(20)PKUserName用戶名稱varchar(20
11、)UserPwd用戶密碼varchar(20)LastSignTime最后登陸時間datatimeSignState用戶登陸狀態(tài)標記intTickeID驗證票記錄編號varchar(128)2.2.2 角色表(Static_Role)Static_RoleStatic_User字段名詳細解釋類型備注RoleID角色編號varchar(20)PKRoleName角色名稱varchar(20)RoleNote角色信息描述varchar(20)2.2.3 用戶角色表(Static_User_Role)Static_User_RoleStatic_User字段名詳細解釋類型備注UserRoleID用戶
12、角色編號varchar(20)PKUserID用戶編號varchar(20)FKRoleID角色編號varchar(20)FKUserRoleNote用戶角色信息描述varchar(20)2.2.4 權(quán)限表(Static_Permission)Static_PermissionStatic_User字段名詳細解釋類型備注PermissionID編號varchar(20)PKPermissionName權(quán)限名稱varchar(20)PermissionNote全息信息描述varchar(20)2.2.5 角色權(quán)限表(Static_Role_Permission)Static_Role_Permi
13、ssionStatic_User字段名詳細解釋類型備注RolePermissionID角色權(quán)限編號varchar(20)PKRoleID角色編號varchar(20)FKPermissionID權(quán)限編號varchar(20)FKRolePermissionNote角色權(quán)限信息描述varchar(20)3 .net技術(shù)概要3.1 WebService SoapHeader對 SQL 數(shù)據(jù)庫執(zhí)行自定義身份驗證和授權(quán)。在這種情況中,應向服務傳遞自定義憑據(jù)(如用戶名和密碼),并讓服務自己處理身份驗證和授權(quán)。 將額外的信息連同請求一起傳遞給 XML Web 服務的簡便方法是通過 SOAP 標頭。為此,需
14、要在服務中定義一個從 SOAPHeader 派生的類,然后將服務的公共字段聲明為該類型。這在服務的公共合同中公開,并且當從 WebServiceUtil.exe 創(chuàng)建代理時可由客戶端使用,如下例所示: using System.Web.Services;using System.Web.Services.Protocols;/ AuthHeader class extends from SoapHeaderpublic class AuthHeader : SoapHeader public string Username; public string Password;public clas
15、s HeaderService : WebService public AuthHeader sHeader; .服務中的每個 WebMethod 都可以使用 SoapHeader 自定義屬性定義一組關(guān)聯(lián)的標頭。默認情況下,標頭是必需的,但也可以定義可選標頭。SoapHeader 屬性指定公共字段的名稱或者 Client 或 Server 類的屬性(本標題中稱為 Headers 屬性)。在為輸入標頭調(diào)用方法前,WebService 設(shè)置 Headers 屬性的值;而當方法為輸出標頭返回時,WebService 檢索該值。WebMethod(Description=This method req
16、uires a custom soap header set by the caller)SoapHeader(sHeader)public string SecureMethod() if (sHeader = null)return ERROR: Please supply credentials;elsereturn USER: + sHeader.Username;然后,客戶端在調(diào)用要求標頭的方法之前,直接在代理類上設(shè)置標頭,如下面的示例所示:HeaderService h = new HeaderService();AuthHeader myHeader = new AuthHead
17、er();myHeader.Username = username;myHeader.Password = password;h.AuthHeader = myHeader;String result = h.SecureMethod();3.2 .Net Remoting的安全認證方式CallContext提供與執(zhí)行代碼路徑一起傳送的屬性集,CallContext是類似于方法調(diào)用的線程本地存儲的專用集合對象,并提供對每個邏輯執(zhí)行線程都唯一的數(shù)據(jù)槽。數(shù)據(jù)槽不在其他邏輯線程上的調(diào)用上下文之間共享。當 CallContext 沿執(zhí)行代碼路徑往返傳播并且由該路徑中的各個對象檢查時,可將對象添加到其中
18、。當對另一個 AppDomain 中的對象進行遠程方法調(diào)用時,CallContext 類將生成一個與該遠程調(diào)用一起傳播的 LogicalCallContext 實例。只有公開 ILogicalThreadAffinative 接口并存儲在 CallContext 中的對象被在 LogicalCallContext 中傳播到 AppDomain 外部。不支持此接口的對象不在 LogicalCallContext 實例中與遠程方法調(diào)用一起傳輸。CallContext.SetData方法存儲給定對象并將其與指定名稱關(guān)聯(lián),CallContext.GetData方法從 CallContext 中檢索具有
19、指定名稱的對象。下面的代碼示例說明如何使用 SetData 方法將主體和標識對象傳輸?shù)竭h程位置以進行標識。public class ClientClass public static void Main() GenericIdentity ident = new GenericIdentity(Bob); GenericPrincipal prpal = new GenericPrincipal(ident, Newstring Level1); LogicalCallContextData data =new LogicalCallContextData(prpal); /Enter dat
20、a into the CallContext CallContext.SetData(test data, data); Console.WriteLine(data.numOfAccesses); ChannelServices.RegisterChannel(new TcpChannel(); RemotingConfiguration.RegisterActivatedClientType(typeof(HelloServiceClass), tcp:/localhost:8082); HelloServiceClass service = new HelloServiceClass()
21、; if(service = null) Console.WriteLine(Could not locate server.); return; / call remote method Console.WriteLine(); Console.WriteLine(Calling remote object); Console.WriteLine(service.HelloMethod(Caveman); Console.WriteLine(service.HelloMethod(Spaceman); Console.WriteLine(service.HelloMethod(Bob); C
22、onsole.WriteLine(Finished remote object call); Console.WriteLine(); /Extract the returned data from the call context LogicalCallContextData returnedData = (LogicalCallContextData)CallContext.GetData(test data); Console.WriteLine(data.numOfAccesses); Console.WriteLine(returnedData.numOfAccesses); 下面的
23、代碼示例說明如何使用 GetData 方法將主體和標識對象傳輸?shù)竭h程位置以進行標識。using System;using System.Text;using System.Runtime.Remoting.Messaging;using System.Security.Principal;public class HelloServiceClass : MarshalByRefObject static int n_instances; int instanceNum; public HelloServiceClass() n_instances+; instanceNum = n_insta
24、nces; Console.WriteLine(this.GetType().Name + has been created. Instance # = 0, instanceNum); HelloServiceClass() Console.WriteLine(Destroyed instance 0 of HelloServiceClass., instanceNum); public String HelloMethod(String name) /Extract the call context data LogicalCallContextData data = (LogicalCa
25、llContextData)CallContext.GetData(test data); IPrincipal myPrincipal = data.Principal; /Check the user identity if(myPrincipal.Identity.Name = Bob) Console.WriteLine(nHello 0, you are identified!, myPrincipal.Identity.Name); Console.WriteLine(data.numOfAccesses); else Console.WriteLine(Go away! You
26、are not identified!); return String.Empty; / calculate and return result to client return Hi there + name + .; 4 詳細代碼設(shè)計4.1 WebService代碼設(shè)計WebService端代碼主要進行對數(shù)據(jù)庫的操作,建立起Client操作數(shù)據(jù)庫所需要的方法,供Client的端調(diào)用。1)class UserInfoMng() 用戶信息管理類,其中包括方法:l CreateUserInfo(string UserName string UserPwd) 建立用戶信息,調(diào)用存儲過程Create
27、UserInfo(UserName,UserPwd)l ModifyUserInfo(string UserName string UserPwd) 修改用戶信息,調(diào)用存儲過程ModifyUserInfo(UserName,UserPwd)l DeleteUserInfo() 刪除用戶信息,調(diào)用存儲過程DeleteUserInfo(UserID)2)class UserAuthentication() 用戶認證類,用來實現(xiàn)用戶角色、權(quán)限的設(shè)置,包括方法:l CreatePermissionInfo(string PermissionName string Permissi-onNote) 建立
28、權(quán)限信息,調(diào)用存儲過程CreatePermissionInfo(PermissionName,PermissionNote)l CreateRoleInfo(string RoleName string RoleNote) 建立角色信息,調(diào)用存儲過程CreateRoleInfo(RoleName,RoleNote)l DeleteRoleInfo() 刪除角色信息,調(diào)用存儲過程DeleteRoleInfo(RoleID)l GrantUserRole(string UserID string RoleID string UserRoleNote) 授予用戶角色,調(diào)用存儲過程GrantUserRole(UserID,RoleID,UserRoleNote)l DeleteUserRole() 刪除用戶角色,調(diào)用存儲過程DeleteUserRole(UserRoleID)l GrantRolePermission(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學校后勤服務與安全管理規(guī)定制度
- 轉(zhuǎn)科轉(zhuǎn)院流程試題及答案
- 城市信息模型智慧交通管理課題申報書
- 信貸決策算法優(yōu)化
- 手術(shù)部位標識識別及安全核查制度考核試題及答案
- 2025年寧夏安全員《B證》考試題庫及答案
- 高中生運用歷史文獻解讀鄭和下西洋貿(mào)易貨幣體系課題報告教學研究課題報告
- 高中生歷史知識遷移能力培養(yǎng)的AI教學系統(tǒng)設(shè)計與評估教學研究課題報告
- 大跨徑拱橋靜動力學分析與安全性研究-洞察及研究
- 2026年醫(yī)療設(shè)備銷售代表面試指南與題目
- 暴雪車輛行駛安全培訓課件
- 2026年七臺河職業(yè)學院單招綜合素質(zhì)筆試模擬試題帶答案解析
- 2026年吉林司法警官職業(yè)學院單招職業(yè)技能考試備考試題帶答案解析
- 2025內(nèi)蒙古潤蒙能源有限公司招聘22人考試題庫附答案解析(奪冠)
- 2026年國家電網(wǎng)招聘之電網(wǎng)計算機考試題庫500道有答案
- 年味課件教學課件
- 中國臨床腫瘤學會(csco)胃癌診療指南2025
- 廣東省廣州市2025年上學期八年級數(shù)學期末考試試卷附答案
- 疑難病例討論制度落實常見問題與改進建議
- 手機鋪貨協(xié)議書
- 2025年新能源停車場建設(shè)項目可行性研究報告
評論
0/150
提交評論