權限管理系統怎么設計?如何設計一個管理系統?
哈嘍小伙伴們 ,今天給大家科普一個小知識。在日常生活中我們或多或少的都會接觸到權限管理系統設計(如何設計一個管理系統)方面的一些說法,有的小伙伴還不是很了解,今天就給大家詳細的介紹一下關于權限管理系統設計(如何設計一個管理系統)的相關內容。
權限管理系統設計(如何設計一個管理系統)
權限管理是所有后臺系統的一個重要組成部分,其目的是控制用戶(User)對資源(Resource)的操作(Action),避免因為權限控制缺失或操作不當引發風險,比如操作失誤,隱私數據泄露等問題。 迄今為止最為普及的權限設計模型是基于角色的訪問控制模型(Role-BasedAccessControl)。它主要是將用戶和用戶組捆綁在一起叫主體,資源和操作捆綁在一起叫權限,中間用角色做橋梁關聯二者。 但近年來隨著對數據管控的精細化,資源和操作的捆綁成為了其掣肘。所以資源也需要像用戶那樣擁有資源組的概念,這樣就變成了用戶/用戶組對資源/資源組有操作權限,這就是基于資源角色的訪問控制模型。 本文將詳細描述基于角色的訪問控制模型到基于資源角色的訪問控制模型的進化過程,并使用強大、高效的開源訪問控制框架 Casbin 來設計一個基于資源角色的訪問控制系統。
(資料圖)
最近在做產品權限模塊的開發,大致的需求如下:
1.系統要有角色的概念,不同的角色有不同的功能權限,并能夠支持用戶自己適配
2.系統能支持公司組織的管理,并能夠支持多個層級(不超過10個)
3.系統能夠支持對單個文件資源的控制,也能支持對多個文件資源的控制。
對于需求 1 和 2,基于角色的訪問控制模型 RBAC 就能夠很好地支持,而對于需求 3,我們對其做了充分的討論,發現了 RBAC 的不足,并對其做了改進升級。
RBAC 介紹基于角色的訪問控制模型 RBAC 在 20 世紀 90 年代期間被大量的專家學者和研究單位進行了深入的研究,先后提出了很多 RBAC 模型。這些模型主要為了解決這樣一個問題:判斷用戶對資源的操作是否為真。它需要支持三個公認的安全原則:
?最小特權原則:模型分配給用戶的權限不能超過其完成任務的需要即可(通過限制分配給角色權限的多少和大小)
?責任分離原則:同一用戶只能分配到一組互斥角色集合中至多一個角色(通過調用相互獨立互斥的角色來共同完成敏感的任務)
?數據抽象原則:用戶對資源的操作可以抽象,不限于操作系統提供的讀,寫,執行權限(操作支持適配)
1996 年以美國 George Mason 大學信息安全技術實驗室(LIST)提出的 RBAC96 模型最具有系統性,得到了普遍的公認。它是一個模型族,包括了 RBAC0 ~ RBAC3 四個概念模型。
RBAC0RBAC0 定義了完全支持 RBAC 概念的任何系統的最低需求:用戶,角色,權限。其中用戶和角色是多對多關系,角色和權限也是多對多關系。其 E-R 如下:
用戶是發起操作的主體,比如測試人員,普通人員,管理人員
角色是連接用戶和權限的橋梁。它既關聯了多個權限,也關聯了多個用戶。設計角色的原因是因為很多人的權限是一樣的。如果直接關聯,給 100 個人分配 10 個權限要做 1000 次關聯操作,而使用角色則需要 10(權限-角色) + 100(用戶-角色) 次關聯操作。
權限是資源和操作組合,它的總數是資源數 * 操作數。比如文件 f 可讀,文件 f 可寫,文件 f 可刪。這里的資源包括頁面菜單資源,接口訪問資源和數據資源。
頁面菜單資源 指系統的導航菜單,包括多級菜單
接口訪問資源 指頁面的功能按鈕,包括增,刪,改,查等操作,其對應著后臺接口的訪問。(一般系統會要求“可見即可操作”)
數據資源 指用戶在同一個頁面能看到的數據是不同的,比如采購部只能看采購部上傳的文件,其它部門看各自部門的數據。(一般會把數據資源和具體的組織架構關聯起來)
RBAC1RBAC1 在 RBAC0 基礎上增加了角色分級的概念, 也就是一個角色可以從另一個角色繼承權限。不過這種權限繼承是一個絕對偏序的關系,也就是樹結構繼承,不能出現閉環。這種設計可以給用戶分組和分層,在一定程度上簡化了權限管理工作。其 E-R 如下:
相較于 RBAC0, 角色表新增了 父節點id 這個屬性來實現角色的權限繼承問題。
RBAC2RBAC2 在 RBAC0 基礎上增加了角色的約束控制:責任分離,它規定了權限被賦予角色時,角色被賦予用戶時,以及當用戶在某一個時刻激活一個角色時所應遵循的強制性規則。責任分離包括靜態責任分離和動態責任分離。主要包括以下約束:
?互斥角色同一個用戶只能分配到一組互斥角色集合中最多一個角色,支持責任分離原則。互斥角色是指各自權限相互制約的兩個角色。比如財務審計中會計員和審核員的兩個角色,這兩個角色是互斥的,同一個用戶不能同時擁有者兩個角色。
?基數約束一個角色被分配的用戶數量受限,一個用戶所用的角色數目受限,同樣一個角色對應的訪問權限數據也應受限,以控制高級權限在系統中的分配。
?先決條件角色用戶想要獲得上級角色必須先獲得其下一級的角色。
相較于 RBAC0, RBAC2 對角色的創建以及用戶和角色,角色和權限的關聯做了限制。這塊的變動主要是為了規范角色的使用,畢竟實現權限控制可以不用角色:直接讓用戶和權限關聯。使用角色的目的就是為了簡化權限管理工作,但不合理的使用可能使權限管理變得復雜,所以才有了角色的約束控制。這塊的規則對于 E-R 圖沒有任何變動,主要受產品的業務邏輯影響較大。
RBAC3RBAC3 是在 RBAC0 的基礎上,將 RBAC1 和 RBAC2 進行整合而形成的最全面的權限管理模型。下圖是 RBAC96 模型的示例圖。該圖展示了 RBAC0 - RBAC3 的模型范疇。
RBAC擴展-用戶組背景在很多的管理系統或者平臺有應用中,我們都會發現在系統中有用戶組這樣用戶集合的概念,比如組織架構,職位。用戶組的出現主要有兩個原因:
?管理方便,減少 admin 的工作量
?用戶集合貼合公司實際情況
第二點比較好理解,畢竟任何公司都有不同的崗位以及它的組織架構。第一點可以這樣理解:當系統中用戶數目和角色數目較多時,很容易出現一部分人擁有相同的權限特性,比如研發部的所有員工,各個分公司的開發人員。如果直接給用戶分配角色,管理員的工作量就會很大(用戶分配多個角色),此時將相同特性的用戶規整到某個用戶組,那么管理員直接給用戶組分配角色,在用戶組的中每個用戶都擁有該角色。這樣用戶加入或退出某用戶組就實現了用戶的角色變更,無需 admin 管理角色。
落地用戶組是一個比較抽象的概念,它表示用戶的集合,它和權限的關聯還是需要通過角色來實現的。根據是否有上下級關系可以分為兩類:
?具有上下級關系的用戶組: 最典型的例子就是組織架構和職位。
?普通用戶組: 也就是沒有上下級關系。比較典型的就是公司里的虛擬小組和工會小組,它們的特性就是跨部門。虛擬小組是指針對某個項目臨時抽調不同部門的同事構成虛擬的項目小組。工會小組是指公司中通過興趣愛好構建的活動小組,比如籃球小組,羽毛球小組等。
因為組織架構比較常見,所以這里以組織架構為例來構建它的 E-R 圖。
系統中如果同時存在組織架構和職位這樣的設計,可以將二者放在同一張表中,以用戶組類型字段來進行區分。當然如果兩個實體的屬性差異較大時可以分開來建表。此外用戶屬組關系表和用戶組角色關系表是否存在(多對多關系需要,1對多關系可以集成到多的屬性中)看具體的業務需求。推薦使用多對多關系,這樣系統的可擴展性比較好。
難點解釋?角色和用戶組的異同
用戶組是用戶的集合, 角色是用戶/用戶組與權限的關聯媒介,這是二者最大的差別。在同一個系統中,如果用戶組的權限和成員僅可以被 admin 修改的話,用戶組的機制是非常接近角色的概念。此外角色也可以在用戶組的基礎上實現,這有利于保持系統中的控制關系,此時角色和用戶組是一對一的關系。
?數據權限
博文[1]中提到組織架構的另外一個作用是控制數據權限,把角色關聯到組織,那么該用戶就只能看到該組織下的數據權限。的確,通過角色將組織和權限關聯起來,同一個組織中的用戶可以共享角色,也就意味著可以共享權限(資源+操作),也就意味著可以共享數據資源。這種數據權限的控制是該方案天然自帶的,也就是不管你要不要這種特性,它必然存在。而且如果你想做其它的數據控制,比如標注員對不同用戶組上傳的標注數據有標注的權限,此時只能通過創建新的角色來解決。
RBAC擴展-資源組?RBAC模型能支持資源組的概念么,理論上是不行的。
需求背景工作中碰到不少項目,客戶對數據資產的管理要求很嚴格,特別是當下大數據時代,數據湖的概念在業界彌漫。客戶需要的產品能夠支持對數據資產的嚴格把控。這些數據只有個別角色可見,那些數據只有某個特定角色可以修改等等。這里需要注意以下幾點:
?數據資源是用戶產生的,是后天的。與之相反的是頁面菜單和接口訪問,它們是先天的,系統出廠就已經定義好的。
?數據資源理論上是沒有上限的。因為是用戶上傳的,只要硬件支持,理論上數據資源的數目是不受限的。頁面菜單,接口訪問都是有限的。
?數據資源需要支持資源的分頁展示以及基本的字段篩選
理論不可行從上面的注意點,我們發現 RBAC 模型天然對數據資源的管理比較弱,因為它只能支持最小粒度的資源,無法支持資源組的概念。為什么?因為 RBAC 模型最基本的前提假設是權限是資源和操作的乘積。對于頁面菜單和接口訪問,因為產品出廠即可初始化,而且數目有限,所以和操作的數目乘積也是屈指可數。但是對于數據資源而言,那就很夸張了。而且每增加一個數據資源就需要增加操作個數的權限記錄了,除了創建者對該數據資源進行分配外都需要 admin 來進行權限分配。
基于資源角色的權限管理RBAC 引入資源組RBAC 模型最大的問題是資源和操作的耦合性較高,導致資源組的概念無法加入其中。要想引入資源組,需要重新定義權限和角色。 這里定義權限是個三元組<用戶/用戶組,資源/資源組,操作>,表示用戶或用戶組對資源或資源組的操作。角色屬于用戶組的一種,它和系統先天資源(頁面菜單和接口訪問)相對應,而用戶組(組織架構和職位)和系統后天資源(數據資源)相對應。
TIPS:在該模型中的角色不再是用戶和資源加操作的乘積,而是用戶組的一種,和組織架構,職位是同等地位的,區別在于角色對應系統的先天資源/功能資源,組織架構這些對應系統的后天資源/數據資源。這里角色不再是之前的概念是因為權限三元組已經完全取代了原來舊角色:集合用戶,資源,操作。
這里給出一個實際的應用場景以及對應的 E-R 圖。
上圖的實體表說明:
?用戶表 用戶信息
?角色表 根據系統的功能劃分的用戶集合,比如標注員,審核員等。支持層級
?用戶組表 根據數據的權限劃分的用戶集合,比如組織架構,職位等。這個和角色表有點類似,畢竟都是用戶的集合,只不過劃分的維度不一樣。支持層級
?按鈕表 系統的所有可點的按鈕或鏈接,其包括導航欄,也包括具體按鈕,當然有的按鈕還對應具體的路由請求。
?功能組表 是按鈕的集合,比如對文件的操作會包含增加,刪除,編輯,列表查看,詳情查看等多個按鈕。支持層級
?文件表 用戶上傳的文件,是一種數據資源
?加工表 用戶通過加工文件得到的新的數據資源,比如抽取文件構建圖譜等。
?數據組表 數據資源組表,通過數據組類型進行數據資源區分。支持層級
關系表說明:
?用戶角色表 用戶和角色的關系表
?用戶屬組權限表 用戶和用戶組的關系表
?功能按鈕權限表 功能組表和按鈕表的關系表
?文件組文件權限表 文件組和文件的關系表,該表示文件能夠列表展示的關鍵
?文件組加工權限表 文件組和加工的關系表,該表示加工數據能夠列表展示的關鍵
?角色功能權限表 角色表和功能組表的關系表,通過一定的邏輯可以替代角色按鈕權限表,用戶按鈕權限表,用戶功能權限表。包含操作屬性
?用戶組數據組權限表 用戶組合數據組的關系表,通過一定的邏輯可以替代用戶數據組權限表,用戶文件權限表,用戶組文件權限表,用戶加工權限表,用戶組加工權限表。包含操作屬性
Casbin 框架通過上面的 E-R 圖,雖然實現了相應的功能,但是需要創建的關系表太多。有沒有簡單粗暴的解決方案呢?答案就是使用 Casbin。它是一個強大的,高效的開源訪問控制框架,其權限管理機制支持多種訪問控制模型。
為什么 Casbin 能夠實現上面的需求,有以下幾點:
?支持自定義請求的個數,默認請求格式為 {subject, object, action}。這點和我們權限的定義<用戶/用戶組,資源/資源組,操作>不謀而合。
?具有訪問控制模型 model 和策略 policy 兩個核心概念。從 RBAC3 中加入用戶組,再試圖加入數據組,可見 E-R圖的變動是很夸張的,而 Casbin 天然支持多 model。
?支持 RBAC 中多層角色繼承,不止主題可以有角色,資源也可以有角色。這里的角色就是組的概念,和上面的設計類似,不過上面做了更細的劃分。
?不支持用戶列表和角色列表的管理,只存儲用戶和角色的映射關系。Casbin 的權限表是用來取代關系表的。如果用戶和角色不是很多(萬級別以上)可以直接搜數據庫, 如果記錄數很多可以像文件組文件權限表那樣增加關系表。
下圖給出了上面的樣例 E-R 圖如何轉變成使用 Casbin 來構建表結構,并能夠支持上述需求的。這里需要注意的是文件組文件關系表和加工組加工關系表是保留的。保留的原因是文件表和加工表的記錄數很大(萬級別以上),如果單純的使用g2規則的話, casbin規則表會增加很多條記錄(萬級別以上)。
對比 E-R 圖的前后變化,發現基于 Casbin 實現的資源角色管理模型將很多用戶和資源的關系表轉換成 g 規則和 g2 規則,將很多權限表變成 p 規則。從而大大縮減表結構。此外因為 casbin 規則表都會加載進內存,所以它判定用戶對資源有沒有相應的操作權限很快。而該表的記錄數在合理的設計下基本會成線性增長。而每條記錄的長度基本可以保持一定長度不變(不存儲詳細信息,只標識唯一id)。
參考文獻1.RBAC用戶、角色、權限、組設計方案[2]
2.可能是史上最全的權限系統設計[3]
3.rbac96模型ppt[4]
4.casbin官網[5]
References[1] 博文:https://zhuanlan.zhihu.com/p/87009472[2] RBAC用戶、角色、權限、組設計方案:https://zhuanlan.zhihu.com/p/63769951[3] 可能是史上最全的權限系統設計:https://zhuanlan.zhihu.com/p/87009472[4] rbac96模型ppt:https://profsandhu.com/cs6393_s12/lecture-rbac96.pdf[5] casbin官網:https://casbin.org/docs/zh-CN/overview
責任編輯:hnmd003
相關閱讀
-
android sdk怎么安裝?安卓studiosdk安裝教程有哪些?|全球今日訊
androidsdk安裝教程(安卓studiosdk安裝教程)什么是AndroidSDKSDK全稱:SoftwareDevelopmentKit即軟件...
2023-01-31
相關閱讀
-
權限管理系統怎么設計?如何設計一個管理系統?
權限管理系統設計(如何設計一個管理系統)權限管理是所有后臺系統的一個重要組成部分,其目的是控制用...
-
四君子湯是什么藥?四君子湯有什么功效?-世界通訊
四君子湯加減(久戰不泄祖傳中藥秘方)作者:中山大學孫逸仙紀念醫院倫俊杰審核:中山大學孫逸仙紀念醫...
-
柴靜究竟做了什么引起群眾震怒?又為何選擇赴美生子?
柴靜面對面(柴靜入美國國籍)她是新聞媒體界的一股清流,著名的央視才女,更是觀眾心中的最美“公知女...
-
電腦網速慢怎么辦?寬帶沒問題電腦網速慢的解決方法?
電腦網速慢怎么辦(寬帶沒問題電腦網速慢)明明已經開通了百兆的光纖,路由器、網線一切都正常,為什么...
-
什么是通假字?通假字的來歷是什么?-世界實時
什么是通假字(通假字的概念)有人說,通假字就是古人寫的錯別字,這話對又不對。下面,讓我們詳細了解一...
-
android sdk怎么安裝?安卓studiosdk安裝教程有哪些?|全球今日訊
androidsdk安裝教程(安卓studiosdk安裝教程)什么是AndroidSDKSDK全稱:SoftwareDevelopmentKit即軟件...
-
每日精選:熱巴表白鹿晗鐵證如山?鹿晗熱巴什么關系?
鹿晗熱巴(熱巴表白鹿晗鐵證如山?)迪麗熱巴和鹿晗這對綜藝CP自從“跑男”收官后,就很少有看到他們同...
-
黎巴嫩很窮嗎?黎巴嫩的經濟發展怎么樣?
黎巴嫩很窮嗎?(沒去過的人都這樣認為?)近日,黎巴嫩被世人熟知,因為首都貝魯特港口發生嚴重的爆炸...
-
三角形邊的關系是什么?三角形基礎知識有哪些?|天天熱頭條
三角形邊的關系(三角形基礎知識歸納總結)一、知識歸納:1、三角形的三邊關系任意兩邊之和大于第三邊,...
-
hrg是什么職位?hrd和hrbp哪個大?
hrg是什么職位(hrd和hrbp哪個大)如果你見到阿里巴巴的員工,你一定會驚嘆他們對組織的熱愛,他們的夢想...
-
玉米深加工是什么意思?玉米深加工產品有哪些?
玉米深加工是什么意思?玉米深加工是優化產業結構,延伸產業鏈,增添產物附加值的具體表現,也是辦理三農...
-
土地拍賣信息從哪里看?土地拍賣流拍后怎么處理?
土地拍賣信息從哪里看?1、到國土資源局的查詢管理中心查詢。因為土地拍賣一般都是土地交易中心委托拍賣...
-
新農合制度包括什么?新農合報銷比例是多少?
新農合制度包括什么?這個內容范圍很廣去年為了更好的達到增加補助、全面覆蓋、鞏固提高的要求,衛生部和...
-
舊人民幣可以去銀行換新的嗎?舊人民幣收藏最新價格
舊人民幣可以去銀行換新的嗎?可以,老版人民幣可以在各大銀行進行兌換,兌換價格為1: 1,例如用100元的...
-
保險退保怎么回事?保險退保怎樣可以退全款?
保險退保怎么回事?退保是指終止保險合同、注銷保險單、終止雙方協議、不再存在保險關系的行為。一般情況...
-
大蒜畝產量一般是多少公斤?一畝大蒜的純利潤是多少?
大蒜畝產量一般是多少公斤?大蒜一畝地能產2500~6000斤不等。不同品種的大蒜在不同肥力的土壤上的產量都...
-
為什么不建議買紙黃金?紙黃金行情如何?
為什么不建議買紙黃金?紙黃金是一種個人憑證式黃金,是繼貴金屬黃金后的一個新的投資品種,投資者按銀行...
-
健身房投資需要多少錢?投資健身房前景怎么樣?
健身房投資需要多少錢?大眾低端:需要50萬左右; 中高檔:需要100萬左右。 其實就一般來說在中小城...
-
馬云在香港與泰國首富會面!馬云有多少億人民幣?
馬云在香港與泰國首富會面!1月30日,有媒體報道稱,馬云在香港與泰國首富、正大集團資深董事長謝國民,...
-
什么是紙黃金?紙黃金怎么交易開戶?
什么是紙黃金?黃金這種貴金屬,有著很高的收藏價值,也是不少人投資理財的對象。而黃金的種類其實有不少...
-
什么叫服務外包?服務外包和勞務派遣的區別?
什么叫服務外包?服務外包指機構將原本由內部完成的非核心的業務剝離出來外包給外部專業服務提供商,并借...
-
銀行推薦的保險理財可靠嗎?可以提前取出來嗎?
是可靠的。 不論是哪種渠道銷售的保險理財產品,其都是經過有關部門批準后才得以上線的,背后有正規的...
-
普通年金是指什么?普通年金購買方式有哪些?|天天速看料
普通年金是指每期的期末,比如年末、半年末、季末、月末,保險人以被保險人生存為條件給付等額保險金的...
-
太平國金一號年金保險怎么樣?怎么購買?
太平國金一號年金保險還不錯。 太平國金一號年金保險是中國太平2023年開門紅產品,屬于比較穩健安全的...
-
凈值型理財怎么算收益?和非凈值型有啥區別?_環球關注
凈值型理財收益的基本計算方法為:凈值型理財收益=(賣出金子-買入凈值)*持有份額+分紅。 在投資者...
-
世界視點!房企融資迎政策曙光 中南建設持續保障長期經營安全
2022年以來,房地產行業在變化中不斷尋找重啟與復蘇的道路,雖然政策方向愈漸明確,但短期市場下行壓力...
-
四大銀行養老理財產品可靠嗎?有哪些優勢?
一般來說,銀行銷售的養老理財產品還是比較可靠的。 首先,銀行銷售的養老理財產品雖然具有一定的風險...
-
納斯達克是美股嗎?標普500和納斯達克100哪個好?
納斯達克是美股嗎?納斯達克英文全稱為「NASDAQ,National Association of Securities Dealers Auto...
-
焦點快播:中消協關注魔獸世界等游戲停服事件
據中新網,中國消費者協會發布《2022年十大消費維權輿情熱點》。其
-
前Meta員工爆料:Facebook系應用可加速消耗手機電池
據IT之家消息,一位前Meta數據科學家指出,Facebook系應用程序可以
精彩推薦
閱讀排行
精彩推送
- 《流浪地球2》闖入北美周票房前十
- 京東回應關閉泰國印尼站:集中資...
- 聚焦:小米全球副總裁Manu Kuma...
- 道瓊斯是什么?道瓊斯和納斯達克...
- 當前資訊!富士康電動車越來越近...
- 價格戰升級!福特Mustang Mach-...
- 電動汽車制造商Arrival裁員并任命新CEO
- 微頭條丨基于PPE平臺打造,奧迪R...
- 北汽藍谷2022年預虧超52億元
- 杭州岳廟秦檜像被砸爛9次!秦檜...
- 哪家銀行貸款容易?銀行貸款需要...
- 財政收入包括哪些?財政收入和稅...
- 什么是股改?股改后多久可以上市?
- 國際電匯是什么意思?電匯只能用...
- 什么叫電匯?電匯和轉賬的區別
- 什么叫電匯?電匯和轉賬的區別
- 房貸利息現在是多少?房貸利息抵...
- 摩托騎手高速上惡意損壞其他車輛...
- 什么叫股票?股票被套如何快速解...
- 自由創業者什么意思?自由創業者...
- 25億韓元是多少人民幣?一億韓元...
- 胡鑫宇案律師稱準備申請刑事立案...
- 泰康人壽怎么樣?泰康人壽退保怎...
- 貸款怎么貸?貸款的房子可以做抵...
- 銀行協議存款是什么?銀行協議存...
- 小米集團全球副總裁辭職!全球副...
- 套利基金什么意思?套利基金好還...
- 個稅改革是什么時候開始的?個稅...
- 鏈家下架中海北京房源?雙方否認...
- 黃金價格下跌意味著什么?黃金價...