劉佳
摘要:基于角色的訪問控制模型是目前大多數(shù)網(wǎng)站系統(tǒng)所采用的權(quán)限控制策略,微軟的.NET平臺(tái)提供了基于角色的安全性模型,用戶通過實(shí)現(xiàn)Iprincipal和IIdentity接口可以方便的構(gòu)建高效的、可擴(kuò)展的權(quán)限管理模塊。
關(guān)鍵詞:基于角色的訪問控制;Iprincipal;IIdentity
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)19-0001-02
1基于角色的權(quán)限管理
基于角色的訪問控制(RBAC)模型的主要作用是管理用戶與權(quán)限間的對(duì)應(yīng)關(guān)系,基本思想是在用戶和權(quán)限之間加入一個(gè)角色,將訪問控制分為兩個(gè)步驟:用戶與角色關(guān)聯(lián),角色與權(quán)限關(guān)聯(lián),從而實(shí)現(xiàn)了用戶與權(quán)限的邏輯分離。RBAC模型的好處是可以簡(jiǎn)化權(quán)限管理、提高工作效率,使系統(tǒng)能夠應(yīng)對(duì)需求的變化,具有更好的擴(kuò)展性。
2.NET基于角色的安全性
微軟.NET平臺(tái)提供了對(duì)RBAC模型的支持,開發(fā)者可以在此基礎(chǔ)上實(shí)現(xiàn)用戶權(quán)限管理功能,其中比較重要的兩個(gè)概念是驗(yàn)證(authentication)和授權(quán)(authorization)。驗(yàn)證是指確定用戶身份,授權(quán)是指根據(jù)用戶身份確定用戶權(quán)限。.NET提供了IIdentity和IPrincipal兩個(gè)接口來完成驗(yàn)證和授權(quán),實(shí)現(xiàn)了IIdentity接口的對(duì)象用于驗(yàn)證用戶身份;實(shí)現(xiàn)了IPrincipal接口的對(duì)象用于確定用戶角色進(jìn)而為用戶授權(quán)。
3權(quán)限管理模塊設(shè)計(jì)與實(shí)現(xiàn)
3.1架構(gòu)與功能
采用三層架構(gòu)+簡(jiǎn)單工廠模式,分為數(shù)據(jù)層、業(yè)務(wù)層和表示層。功能包括用戶管理,角色管理,權(quán)限管理,用戶身份認(rèn)證與授權(quán)。
3.2數(shù)據(jù)庫(kù)實(shí)體關(guān)系模型
權(quán)限管理模塊包含用戶、角色、權(quán)限、用戶一角色、角色一權(quán)限5個(gè)核心對(duì)象。因此,數(shù)據(jù)庫(kù)中也對(duì)應(yīng)包含5個(gè)表,分別是:users表,存儲(chǔ)用戶信息;roles表,存儲(chǔ)角色信息;permissions表,存儲(chǔ)權(quán)限信息;userrole表,存儲(chǔ)用戶與角色間的對(duì)應(yīng)關(guān)系;ro-lepermisson表,存儲(chǔ)角色與權(quán)限的對(duì)應(yīng)關(guān)系。
3.3實(shí)體類設(shè)計(jì)
實(shí)體類與數(shù)據(jù)庫(kù)表相對(duì)應(yīng),有users,roles,permissions三個(gè)類,僅負(fù)責(zé)實(shí)體的表示和數(shù)據(jù)的傳遞,不包含任何業(yè)務(wù)邏輯。
3.4業(yè)務(wù)層設(shè)計(jì)與實(shí)現(xiàn)
業(yè)務(wù)層包含3個(gè)主要類:users,roles,permissions分別實(shí)現(xiàn)用戶、角色、權(quán)限的管理邏輯。以u(píng)sers為例,主要實(shí)現(xiàn)了用戶的增、刪、改、查和獲取用戶基本信息、角色信息和權(quán)限信息等功能。
3.5實(shí)現(xiàn).NET基于角色的權(quán)限管理接口
用戶可以通過編程實(shí)現(xiàn)IIdentity和IPrincipal接口來實(shí)現(xiàn)RBAC模型。IIdentity接口用于確定用戶身份,包含兩個(gè)重要屬性:Name,獲取當(dāng)前用戶的名稱;IsAuthenticated,指示用戶身份是否通過了驗(yàn)證。IPrincipal接口用于確定用戶角色,包含一個(gè)屬性-Identity,它包含當(dāng)前用戶的身份信息,它的類型是IIden-tity,也就是說IPrincipal必須實(shí)現(xiàn)IIdentity接口;此外IPrincipal接口還包含一個(gè)方法-IsInRole,用于確定當(dāng)前用戶是否屬于指定的角色。
在ASP.NET中,用戶身份信息存儲(chǔ)在Httpcontext.User屬性中,它接受并返回實(shí)現(xiàn)了IPrincipal接口的對(duì)象,而IPrincipal接口必須實(shí)現(xiàn)IIdentity接口,所以只要在程序中實(shí)現(xiàn)這兩個(gè)接口,就可以將用戶信息、角色信息、權(quán)限信息等保存到Httpcontext.User屬性中,在程序中隨時(shí)隨地訪問用戶的相關(guān)信息。
創(chuàng)建一個(gè)Myprincipal類實(shí)現(xiàn)IPrincipal接口。其中比較重要的兩個(gè)方法是:ValidateLogin()一根據(jù)用戶名和密碼驗(yàn)證用戶身份;Myprincipal()一類的構(gòu)造函數(shù),得到用戶角色和權(quán)限信息。代碼如下。
3.6表示層調(diào)用
首先根據(jù)用戶名和密碼驗(yàn)證用戶身份,通過驗(yàn)證的用戶信息存儲(chǔ)在Context.User中。