<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 176, comments - 240, trackbacks - 0, articles - 7

    [導入]權限系統(1)--基本模式

    Posted on 2005-11-26 10:39 canonical 閱讀(977) 評論(0)  編輯  收藏 所屬分類: 設計理論

         在系統中發生的事情,抽象的說都是某個主體(subject)在某個資源(resource)上執行了某個操作(operation)。
              subject --[operation]--> resource
    所謂權限管理,就是在這條信息傳遞路徑中加上一些限制性控制。
        主體試圖去做的 limited by 系統允許主體去做的 = 主體實際做的。
    可以看到,權限控制基本對應于filter模式。subject試圖去做的事情應該由業務邏輯決定,因而應該編碼在業務系統中。

        先考慮最粗粒度的控制策略,控制點加在subject處,即無論從事何種操作,針對何種資源,我們首先需要確認subject是受控的。只有通過認證的用 戶才能使用系統功能,這就是authentication。boolean isAllowed subject)
       稍微復雜一些,控制可以施加在subject和operation的邊界處(此時并不知道具體進行何種操作),稱為模塊訪問控制,即只有某些用戶才能訪問特定模塊。isAllowed(subject, operation set)
       第三級控制直接施加在operation上,即操作訪問控制。operation知道resource和subject(但它尚沒有關于resource 的細節知識),我們能夠采取的權限機制是bool isAllowed(subject, operation, resource), 返回true允許操作,返回false則不允許操作。

        最簡單的情況下,subject與resource之間的訪問控制關系是靜態的,可以直接寫成一個權限控制矩陣

    for operationA:
                resourceA   resourceB
    subjectA      1           0
    subjectB      0           1


    isAllowed(subjectA, resourceA)恒等于true

    如果多個operation的權限控制都可以通過這種方式來表示,則多個權限控制矩陣可以疊加在一起

    for operationA, operationB:
                resourceA   resourceB
    subjectA      10           01
    subjectB      01           11

    當subject和resource的種類很多時,權限控制矩陣急劇膨脹,它的條目數是N*M。很顯然,我們需要進行矩陣分解。這也是最基本的控制手段之一: 在系統中增加一個瓶頸,或者說尋找到隱含的結構。
          subject_resource = subject_role * role_resource
    這 樣系統權限配置條目的數量為 N*R + R*M, 如果R的數目遠小于subject和resource,則實現簡化。這稱為RBAC(role based access control),它的一個額外好處是權限系統的部分描述可以獨立于subject存在,即在系統中沒有任何用戶的時候,通過角色仍然可以表達部分權限信息。可以說角色是subject在權限系統中的代理(分解)。

         有時候引入一個瓶頸還不過癮,有人引入組的概念,與role串聯,
    subject_resource = subject_group_role * role_resource
    或著group與role并聯,
    subject_resource = subject_group * group_resource

         與role稍有不同,一般情況下group的業務含義更加明顯,可能對應于組織結構等。將組織機構明確引入權限體系,有的時候比較方便,但對于權限系統自 身的穩定性而言,未見得有什么太大的好處。并聯模式有些多余,串聯模式又過于復雜,細節調整困難,特別是多條控制路徑造成的沖突情況。一般情況下,我不提 倡將group引入權限控制中。

        比操作控制更加深入的控制就是數據控制了,此時需要對于resource的比較全面的知識。雖然表面上,仍然是
    boolean isAllowed(subject, operation, resource),但控制函數需要知道resource的細節。例如行級控制(row-level)或者列級控制(column-level)的實現。 因為我們一般情況下不可能將每一個條目都建模為獨立的resource,而只能是存在一個整體描述,例如所有密級為絕密的文檔。在witrix平臺中,數 據控制主要通過數據源的filter來實現,因為查詢條件(數據的定位條件)已經被對象化為Query類,所以我們可以在合適的地方自由的追加權限控制條 件。

         以上的討論中,權限控制都是根據某些靜態描述信息來進行的,但現實世界是多變的。最簡單的,當subject從事不同業務時,對應于同一組資源,也可能對 應的權限控制并不同(在witrix平臺中,對應于IDataSource的模式切換)。更復雜一些, 在不同的時刻, 我們需要根據其他附加信息來作出是否允許操作的判斷, 即此時我們權限設置的不僅僅是一些靜態的描述信息, 而是一個完整的控制函數, 這就是所謂的工作流權限控制,一種動態權限控制.


    主站蜘蛛池模板: 亚洲依依成人精品| 97热久久免费频精品99| 亚洲色无码专区一区| 亚洲AV无码一区二区三区DV| 免费国产成人高清视频网站 | 亚洲深深色噜噜狠狠爱网站| 日韩免费电影在线观看| 思思re热免费精品视频66 | 亚洲AV无码一区二区三区在线观看| 69堂人成无码免费视频果冻传媒| 最近中文字幕大全免费版在线| 羞羞网站在线免费观看| 亚洲s码欧洲m码吹潮| 亚洲中文无码a∨在线观看| 亚洲va在线va天堂va不卡下载| 国产亚洲精aa成人网站| 亚洲精品和日本精品| 国产免费无遮挡精品视频 | 美女被羞羞网站免费下载| 亚洲日韩一区二区三区| 亚洲 日韩经典 中文字幕| 亚洲性一级理论片在线观看| 夜夜亚洲天天久久| 亚洲好看的理论片电影| 亚洲大成色www永久网站| 亚洲精品美女久久久久99| 伊人久久精品亚洲午夜| 国产午夜亚洲精品理论片不卡| 亚洲国产精品自产在线播放| yy6080久久亚洲精品| 亚洲国产一区视频| 亚洲情a成黄在线观看| 亚洲一区日韩高清中文字幕亚洲| 亚洲一区二区视频在线观看| 在线日韩日本国产亚洲| 亚洲精品无码av人在线观看| 亚洲av无码无在线观看红杏| 亚洲精品私拍国产福利在线| 亚洲视频一区二区三区| 亚洲成年网站在线观看| 亚洲第一综合天堂另类专|