<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                https://www.jianshu.com/p/115938c6294e # RBAC權限模型\[完整\] ## 一、前言 ? ? 權限一句話來理解就是對資源的控制,對web應用來說就是對url的控制,關于權限可以毫不客氣的說幾乎每個系統都會包含,只不過不同系統關于權限的應用復雜程序不一樣而已,現在我們在用的權限模型基本上都是以RBAC為基礎進行擴展的,我們今天就將RBAC權限模型進行下介紹。? ## 二、RBAC模型 ? ? RBAC是Role-BasedAccess Control的英文縮寫,意思是基于角色的訪問控制。RBAC認為權限授權實際上是Who、What、How的問題。在RBAC模型中,who、what、how構成了訪問權限三元組,也就是“Who對What(Which)進行How的操作,也就是“主體”對“客體”的操作,其中who——是權限的擁有者或主體(如:User、Role),what——是資源或對象(Resource、Class) ? ? RBAC其實是一種分析模型,主要分為:基本模型RBAC0(Core?RBAC)、角色分層模型RBAC1(Hierarchal?RBAC)、角色限制模型RBAC2(Constraint?RBAC)和統一模型RBAC3(Combines?RBAC)。 ### 1)RBAC0 ? ? RBAC0,它是RBAC0的核心,RBAC1、RBAC2、RBAC3都是先后在RBAC0上的擴展。RBAC0定義了能構成RBAC控制系統的最小的元素集合,RBAC0由四部分構成: ? ??a、用戶(User) ? ??b、角色(Role) ? ??c、會話(Session) ? ??d、許可(Pemission),其中許可又包括“操作”和“控制對象”其中許可被賦予角色,而不是用戶,當一個角色被指定給一個用戶時,此用戶就擁有了該角色所包含的許可。會話是動態的概念,用戶必須通過會話才可以設置角色,是用戶與激活的角色之間的映射關系。 ![](//upload-images.jianshu.io/upload_images/10215580-77adebfa6af4da13.png?imageMogr2/auto-orient/strip|imageView2/2/w/632/format/webp) ? ??圖中,用戶與角色是多對多的關系;角色和許可也是多對多的關系;用戶與會話是一對一關系;會話與角色是一對多關系; ## 2)RBAC1 ? ? RBAC1,它是RBAC角色的分層模型,RBAC1建立在RBAC0基礎之上,在角色中引入了繼承的概念,有了繼承那么角色就有了上下級或者等級關系 ![](//upload-images.jianshu.io/upload_images/10215580-8e1e03450ae43e5e.png?imageMogr2/auto-orient/strip|imageView2/2/w/586/format/webp) ## 3)RBAC2 ? ?RBAC2,它是RBAC的約束模型,RBAC2也是建立的RBAC0的基礎之上的,在RBAC0基礎上假如了約束的概念,主要引入了靜態職責分離SSD(Static Separation of Duty)和動態職責分離DSD(Dynamic Separation of Duty)。 ? ??SSD是用戶和角色的指派階段加入的,主要是對用戶和角色有如下約束: a、互斥角色:同一個用戶在兩個互斥角色中只能選擇一個 b、基數約束:一個用戶擁有的角色是有限的,一個角色擁有的許可也是有限的 c、先決條件約束:用戶想要獲得高級角色,首先必須擁有低級角色 ? ??DSD是會話和角色之間的約束,可以動態的約束用戶擁有的角色,如一個用戶可以擁有兩個角色,但是運行時只能激活一個角色。 ![](//upload-images.jianshu.io/upload_images/10215580-7fd11a73402ce662.png?imageMogr2/auto-orient/strip|imageView2/2/w/596/format/webp) ## 4)RBAC3 ? ? RBAC3,它是RBAC1與RBAC2合集,所以RBAC3是既有角色分層又有約束的一種模型 ![](//upload-images.jianshu.io/upload_images/10215580-5ad913b9c08ecb06.png?imageMogr2/auto-orient/strip|imageView2/2/w/611/format/webp) ? ? 以上就是RBAC模型的四種設計思想,現在我們用的權限模型都是在RBAC模型的基礎上根據自己的業務進行組合和改進。 # 三、我們的權限模型 ? ??先大概解釋下我們的業務,我們做的是教育行業高校云平臺,每個學校都可以在我們平臺進行注冊,注冊完成后可以享受一些基礎的服務,當然了不同級別的用戶享受的基礎服務是不同的,這些基礎的服務包括新生注冊管理、基礎系統管理、考試系統管理、評教系統管理等模塊,每個模塊都相當于一個子系統,每個子系統都有各自的功能,每個功能也都有各自的相關的頁面,而所有的子系統、頁面以及頁面上的功能按鈕都是需要我們權限進行管理,所以我們的權限管理相對來說任務也是比較繁重的。 ? ??我們先來看下我們權限管理模塊的類圖: ![](//upload-images.jianshu.io/upload_images/10215580-6481b54ee5dc85c7.png?imageMogr2/auto-orient/strip|imageView2/2/w/792/format/webp) ? ? 核心還是基于用戶、角色和許可的RBAC模型,只不過我們將這三者分別進行了相應的擴展: ## 用戶 ? ??無論哪個用戶首先它必須是屬于某個部門的,部門是行政單位,而某個部門也可以包含多個用戶,所以部門和用戶的關系為1對多的關系; ? ? 先說一下為什么要有用戶組的概念,如果有一類的用戶都要屬于某個角色,我們一個個給用戶授予角色,重復工作特別多,所以我們把這么一些用戶進行分類,也就是用戶組,這樣的話,我們直接對用戶組賦予角色,減少重復的工作量,這樣達到的目的是這,用戶擁有的所有許可,就是用戶個人所屬角色擁有的許可與該用戶所在用戶組所屬角色擁有的許可之和。一個用戶可以屬于多個用戶組,一個用戶組也可以包括多個用戶,所以用戶與用戶組是多對多的關系; ## 角色 ? ??角色是一定數量的許可的集合,許可的載體,一個角色可以包含多個用戶,一個用戶同樣的也可以屬于多個角色,所以角色與用戶的關系為多對多的關系。同樣的一個角色可以包含多個用戶組,一個用戶組也可以屬于多個角色,所以角色和用戶組也是多對多的關系; ## 許可 ? ??許可我一般稱它為權限,它包括控制對象和操作,控制對象一般為資源,包括菜單、頁面、文件等資源,而操作一般包括增刪改查等,圖中“系統操作”就是操作,“菜單信息”就是控制對象; ? ? 菜單信息中的每個菜單都會有增刪改查等操作,所以菜單信息與系統操作是一對多的關系; ? ??我們給角色授予權限時,授予就是顆粒最小的權限,所以我們將系統操作權限授予某些角色。一個角色可以擁有多個系統操作,一個系統操作同樣也可以屬于多個角色,所以系統操作和角色為多對多的關系。 ? ??到這里我們就將我們的權限模型之間的關系基本上介紹完畢了,在類圖中的兩個類之間的多對多的關系在數據庫中會出現第三張表,所以下面我們來看下我們的數據庫中表的關系圖: ![](//upload-images.jianshu.io/upload_images/10215580-a999f8dc4c0072a3.jpg?imageMogr2/auto-orient/strip|imageView2/2/w/619/format/webp) # 四、改進 ? ??現在這個權限模型已經開發出來投入使用了,當然了現在的模型也不一定是最好的,只能說針對于現在的系統的規模是比較合適的,對于現在的權限模型還是有可以擴展的地方,其實就是類圖中的菜單信息,在系統中我們只是粗獷的將子系統名稱、子系統菜單、子系統菜單頁面元素、文件等這些資源全部放到了一個表中即菜單信息表,在表中我們利用類型進行具體區分,同時利用上下級關系來管理他們之間的層次關系,但是在這個表中冗余的數據會特別多,我覺得如果可以更進一步改善的話,可以考慮將菜單表按照菜單類型進行拆分,然后再來一張表資源關系表來管理這些類型資源之間的關系。 ![](//upload-images.jianshu.io/upload_images/10215580-9e4fe2319073eeea.png?imageMogr2/auto-orient/strip|imageView2/2/w/507/format/webp) # 五、總結 ? ??這篇文章我們將RBAC權限模型的4種設計思想進行了介紹,接下來我將我們自己項目中的權限模型進行了詳細的介紹,最后還針對我們當前的權限模型提出了自己的一點想法。如有異議的地方,請大家多多指正。 \--------------------- 作者:lorron 鏈接:https://www.jianshu.com/p/115938c6294e 來源:簡書 著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看