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