參考文獻(xiàn)
1. MSDN 文檔
2. MS Authorization and Profile Application Block Help 文檔
1.
概述
在應(yīng)用程序設(shè)計(jì)中,常常需要根據(jù)不同用戶控制其在程序中的行為。例如:管理員、經(jīng)理、員工在程序中的訪問級(jí)別存在差異,而一個(gè)用戶可以扮演多個(gè)角色。用戶訪問受保護(hù)資源或執(zhí)行受保護(hù)操作的能力稱為權(quán)限,可表述為“判斷 WHO對(duì)WHAT(WHICH)進(jìn)行HOW的操作”的邏輯表達(dá)式。
現(xiàn)有的權(quán)限認(rèn)證主要基于兩種機(jī)制: ACL(訪問控制列表)和基于角色的控制。
ACL為安全對(duì)象建立訪問控制列表(DACLS)。通過比較用戶的權(quán)限是否存在于列表中,決定用戶可以訪問資源。
基于角色( Role-based)通過將系統(tǒng)按角色劃分權(quán)限。當(dāng)用戶關(guān)聯(lián)到某個(gè)角色,將自動(dòng)獲得該角色所擁有的權(quán)限。
在企業(yè)應(yīng)用方面,基于角色的控制方法,由于減小了授權(quán)管理的復(fù)雜性,易于操作,具有較好的前景。
值得注意的是,權(quán)限并不是簡(jiǎn)單的判定過程。權(quán)限的檢查常常需要應(yīng)用業(yè)務(wù)邏輯。例如:合同只能被其創(chuàng)建者刪除,同組用戶可以修改,授權(quán)用戶可以查看。通常,與權(quán)限控制對(duì)象的實(shí)例相關(guān)的稱為細(xì)粒度權(quán)限,而只與對(duì)象類型關(guān)聯(lián)的稱為粗粒度權(quán)限。
1.
設(shè)計(jì)目標(biāo)
權(quán)限系統(tǒng)模塊提供基本架構(gòu)支持基于角色方式的授權(quán)。
1. 向系統(tǒng)中的用戶授權(quán)
2. 支持角色的繼承
3. 支持權(quán)限系統(tǒng)的多種存儲(chǔ)方式
4. 支持業(yè)務(wù)邏輯驗(yàn)證
5. 具有較好的擴(kuò)展性和性能
2.
分析
2.1. 權(quán)限系統(tǒng)的工作流程
總體上講,權(quán)限系統(tǒng)的工作由下列過程組成:
① 權(quán)限系統(tǒng)初始化
② 權(quán)限系統(tǒng)接收用戶對(duì)資源的訪問請(qǐng)求
③ 權(quán)限系統(tǒng)根據(jù)用戶具有的權(quán)限,返回true或false
④ 最后,權(quán)限系統(tǒng)釋放其資源,銷毀實(shí)例。
2.2. 權(quán)限系統(tǒng)的對(duì)象
n 資源
資源是權(quán)限系統(tǒng)的保護(hù)對(duì)象。資源可以是某個(gè)實(shí)體,如文件系統(tǒng)中的文件;也可以是概念。在應(yīng)用程序中,資源更多以模塊劃分。
資源間存在嵌套關(guān)系。如:現(xiàn)金流量表屬于財(cái)務(wù)報(bào)表。
對(duì)資源的訪問方式稱為操作。顯然,資源可以具有多種操作。如:合同具有錄入、查看、修改、刪除、執(zhí)行、審核、打印等不同操作。
操作間存在重疊關(guān)系,比如對(duì)合同審核者當(dāng)然可以查看合同。
概念模型如下:
<shapetype id="_x0000_t75" coordsize="21600,21600" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype>
n 用戶和角色
用戶是權(quán)限系統(tǒng)的訪問實(shí)體。角色是具有某類權(quán)限集的用戶的統(tǒng)稱。角色之間存在繼承關(guān)系,比如財(cái)務(wù)主管同時(shí)也是財(cái)務(wù)人員。
概念模型如下:
值得注意的是,權(quán)限與角色并不存在一致性。如:某用戶希望擁有其角色外的權(quán)限;某角色希望屏蔽屬于其類別的某個(gè)(些)用戶的權(quán)限。
概念模型擴(kuò)展如下:
① 用戶可以直接賦權(quán)限
② 角色與受控列表關(guān)聯(lián)。受控列表即存儲(chǔ)角色中某些用戶禁止對(duì)角色中允許的資源進(jìn)行訪問列表。
2.3. 權(quán)限系統(tǒng)的模塊
n 資源管理
系統(tǒng)中的受控資源通常都是可確定的。如果資源發(fā)生變化,常意味著代碼的更迭(包含資源分配與驗(yàn)證部分)。因此,在系統(tǒng)中的受控資源在程序運(yùn)行態(tài)時(shí)不可變的前提下,資源管理的功能較為簡(jiǎn)單:
a) 獲取系統(tǒng)中所有資源列表
b) 根據(jù)資源(操作)標(biāo)識(shí),取得資源信息。
n 權(quán)限管理
權(quán)限管理是系統(tǒng)中的關(guān)鍵部分,決定權(quán)限分配到實(shí)體對(duì)象中的過程。
權(quán)限管理的功能如下:
a) 增加、刪除、更新用戶或角色對(duì)資源訪問的權(quán)限。
b) 獲取系統(tǒng)中某用戶或角色所賦有的所有權(quán)限。
c) 獲取系統(tǒng)中某用戶或角色對(duì)某種資源(操作)的權(quán)限
d) 增加、刪除角色受控列表?xiàng)l目
值得注意的是用戶權(quán)限是用戶所具有的角色權(quán)限和其本身所賦予的權(quán)限的交集。因此在權(quán)限對(duì)象中設(shè)置角色用戶標(biāo)志加以區(qū)分。
n 權(quán)限檢查
權(quán)限檢查是系統(tǒng)中的應(yīng)用部分。 權(quán)限檢查包含業(yè)務(wù)邏輯檢查。
① 權(quán)限檢查使用權(quán)限管理器的功能。
② 業(yè)務(wù)邏輯檢查共發(fā)生兩次。一次在權(quán)限檢查之前,一次在權(quán)限檢查之后。權(quán)限檢查之前的業(yè)務(wù)邏輯檢查可以直接返回結(jié)果,而不用再進(jìn)行權(quán)限檢查。
3.
權(quán)限系統(tǒng)架構(gòu)
權(quán)限系統(tǒng)設(shè)計(jì)為可擴(kuò)展性結(jié)構(gòu)。使用 Provider 接口用于權(quán)限模型與數(shù)據(jù)存儲(chǔ)間的交互。通過實(shí)現(xiàn)自定義的 Provider ,經(jīng)過配置入口插入權(quán)限系統(tǒng)中。
配置文件以 XML 文件為主流格式。 Provider 接口定義如下:
Element
為
XML
文件元素類型
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
