3分鐘快速了解豬齒魚許可權

本文將介紹數智化開發管理平台豬齒魚Choerodon的許可權體系,幫助豬齒魚用戶從自身需求出發,進行更細粒度的許可權控制。本文也將對豬齒魚中所應用的 RBAC 許可權模型和 HZERO(漢得企業級 PaaS 平台)的角色許可權體系進行簡要介紹。

一、RBAC 許可權模型

豬齒魚 Choerodon 許可權體系基於RBAC許可權模型而建立。以下先簡要介紹下RBAC模型。

RBAC是Role Based Access Control的英文縮寫,意思是基於角色的訪問控制。RBAC認為許可權的過程可以抽象概括為:判斷「Who是否可以對What進行How的訪問操作」這個邏輯表達式的值是否為True的求解過程。即,將許可權問題轉換為Who、What、How的問題,Who、What、How構成了訪問許可權三元組。其中who是許可權的擁有者或主體(User、Role),What是資源或對象(Resource、Class),How指具體操作(View, Edit)。

RBAC許可權模型如下:

圖片來源於網路

相對於直接將許可權授予用戶個人來說,RBAC許可權模型增加了角色,授權會更加的靈活方便。角色可以理解為一定數量的許可權集合,許可權的載體。

RBAC主要包含四個子模型:RBAC0、RBAC1、RBAC2和RBAC3,整體又叫做RBAC96模型族。

圖片來源於網路

RBAC0:RBAC0是許可權管理的核心部分,其他的版本都是建立在RBAC0的基礎上。簡單來說,RBAC0就是一個用戶擁有若干角色,每一個角色擁有若干許可權。這樣就構造成「用戶-角色-許可權」的授權模型。在這種模型中,用戶與角色之間,角色與許可權之間,一般都是多對多的關係。並且將關係作為一個單獨的概念來使用,這樣可以在關係概念中加入一些其他的屬性。

RBAC1:RBAC1建立在RBAC0的基礎上,引入了角色繼承的概念。有了繼承。角色就有了上下級或者等級關係,每個等級許可權不同,從而實現更細顆粒度的許可權管理,比如:一個部門有正副經理,副經理的許可權只有正經理的部分許可權,這時候就可以採用RBAC1許可權模型。

RBAC2:RBAC2在RBAC0模型的基礎之上,增加了角色約束,主要約束哪些操作是可進行的,哪些是不可進行。

RBAC3:RBAC3是RBAC1和RBAC2的合集,所以RBAC3既有角色分層,也包括可以增加各種限制。

二、HZERO角色

豬齒魚使用漢得企業級PaaS平台HZERO作為微服務開發框架,豬齒魚的角色許可權控制也使用了HZERO的角色許可權體系。

HZERO是一個企業級PaaS平台,結合漢得多年的項目實施經驗,抽象、封裝了大量的應用標準服務及功能,以幫助企業產品研發、項目實施更加高效便捷,避免大量產品和項目重複造輪子帶來的成本浪費。

在HZERO角色體系中,所有角色都是屬於平台(超級)管理員或租戶(超級)管理員的子孫角色。平台管理員擁有所有平台級許可權,創建平台級許可權集時,所有平台級許可權會被自動分配到平台管理員上;租戶管理員擁有所有租戶級許可權,創建租戶級許可權集時,所有租戶級許可權會被自動分配到租戶管理員上。所以,創建許可權集後,只能由對應層級的超級管理員往下分配許可權。

HZERO角色體系分創建體系和繼承體系,創建體系表現在父、子角色關係上,繼承體系表現在繼承角色關係上。兩種體系的區別是:在分配許可權時,例如,在給租戶模板角色分配許可權後,所有繼承自該租戶模板角色的角色將自動擁有該租戶模板角色被分配的許可權,用戶可以一鍵往下分配繼承自該租戶角色模板的角色許可權;創建體系則不能一鍵往下分配子角色的許可權。在回收許可權時,會回收整個創建體系、繼承體系的許可權。

具體使用詳情可參考 HZERO角色管理文檔

三、豬齒魚預定義角色

豬齒魚預定義角色是豬齒魚許可權的基礎,由平台默認創建,包括以下四個角色:

  • 組織管理員角色模板:組織層所有許可權
  • 組織成員角色模板:組織層部分查看許可權
  • 項目所有者角色模板:項目層所有許可權
  • 項目成員角色模板:項目層部分操作許可權

創建組織時,會基於這四個模板創建對應組織的相關角色,即所有組織的四個預定義角色,都繼承自這四個角色模板;通過HZERO的繼承體系,可以一鍵往下分配許可權或者回收許可權。

四、角色標籤

豬齒魚通過角色標籤區分是組織層角色還是項目層角色、區分對應用服務的Gitlab許可權,以此實現業務許可權的靈活管理與有效隔離。

使用平台管理員角色,進入平台管理-》HZERO菜單-》角色管理菜單,進入HZERO標籤管理介面。選擇角色標籤,可以查看豬齒魚的所有角色標籤及其含義。

該頁面上可編輯的只有TENANT_ROLE、PROJECT_ROLE、GITLAB_OWNER、GITLAB_DEVELOPER等四個標籤。

首先介紹進行層級區分的兩個標籤:

  1. TENANT_ROLE:用於標識豬齒魚租戶層角色,該標籤有兩個含義,一是用於區分HZERO的角色與豬齒魚的角色,二是用於區分豬齒魚的組織層角色和項目層角色。
  2. PROJECT_ROLE:用於標識豬齒魚的項目層角色,含義同TENANT_ROLE。

值得注意的是,只有擁有以上兩個中任意一個標籤的角色,才能在管理中心-》角色管理進行查看和編輯。

另外,還有控制GitLab許可權的兩個標籤:

  1. GITLAB_OWNER:當為用戶分配擁有該角色標籤的角色時,會自動為該用戶分配項目下所有應用服務在GitLab的Owner許可權。
  2. GITLAB_DEVELOPER:同GITLAB_OWNER,會自動為該用戶分配項目下所有應用服務在GitLab的Developer許可權。

以上兩個標籤的設置主要是為了解決用戶擁有項目下的菜單許可權,但是,在實際操作過程中,卻沒有GitLab許可權而操作失敗這一問題;但是因為這兩個標籤是給項目下所有應用服務分配許可權,所以需謹慎使用,該標籤需要配合PROJECT_ROLE標籤使用。

附:豬齒魚GitLab許可權說明

1.豬齒魚的組織所有者、項目所有者角色,默認擁有gitlab_owner角色標籤,擁有項目下所有應用服務在GitLab的Owner許可權;

2.對於項目成員默認沒有Gitlab任何許可權,可根據需要在程式碼管理介面,給用戶分配具體的許可權,包括Guest、Repoter等角色;

3.對於自定義角色,可根據需求選擇GITLAB_OWNER或者GITLAB_DEVELOPER角色標籤。

五、自定義角色

了解了角色標籤的含義,我們可以開始創建自定義角色。

您可以在組織層或平台層找到自定義角色的入口:組織層-》管理中心-》角色管理;平台層-》角色管理。

1. 組織層角色管理

可以創建、編輯該組織下的所有自定義角色,創建項目層角色時,必須要選擇GitLab角色標籤,以避免擁有菜單許可權,但是沒有GitLab許可權,從而導致操作失敗的情況;在該介面創建的角色,會根據角色層級的不同,自動分配TENANT_ROLE或PROJECT_ROLE角色標籤,且父級角色都是該組織的組織管理員。

具體使用詳情可參考 角色管理幫助手冊

2.平台層角色管理

除了創建和編輯角色外,還可以複製和繼承角色,以快速創建自定義角色。比如:您想要創建某個組織層角色(該角色需要擁有組織管理員除了創建項目的操作外的所有許可權)時,您可選擇組織管理員角色,點擊「複製」,角色標籤選擇TENANT_ROLE,然後再去掉創建項目許可權集即可。

具體使用詳情可參考 HZERO角色管理文檔

綜上,豬齒魚的許可權體系相對完善,豬齒魚用戶不僅可以一鍵分配或回收角色許可權,方便快捷地進行許可權管理;也可創建自定義角色,進行更細粒度的許可權控制,滿足自身的訂製化需求。

如果您想嘗試豬齒魚的許可權體系,歡迎您申請試用豬齒魚: //choerodon.com.cn/#/iam/register-organization

參考文檔

  1. 豬齒魚產品手冊鏈接://open.hand-china.com/document-center/doc/product/10177/10608?doc_id=170160&doc_code=37618#%E8%A7%92%E8%89%B2%E7%AE%A1%E7%90%86
  2. RBAC模型: //blog.csdn.net/qq_28988969/article/details/100995546
  3. RBAC的組成://zhuanlan.zhihu.com/p/158752542
  4. HZERO角色管理: //open.hand-china.com/document-center/doc/component/161/16062?doc_id=154878&doc_code=28929

本文由豬齒魚技術團隊原創,轉載請註明出處