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等四個標籤。
首先介紹進行層級區分的兩個標籤:
- TENANT_ROLE:用於標識豬齒魚租戶層角色,該標籤有兩個含義,一是用於區分HZERO的角色與豬齒魚的角色,二是用於區分豬齒魚的組織層角色和專案層角色。
- PROJECT_ROLE:用於標識豬齒魚的專案層角色,含義同TENANT_ROLE。
值得注意的是,只有擁有以上兩個中任意一個標籤的角色,才能在管理中心-》角色管理進行檢視和編輯。
另外,還有控制GitLab許可權的兩個標籤:
- GITLAB_OWNER:當為使用者分配擁有該角色標籤的角色時,會自動為該使用者分配專案下所有應用服務在GitLab的Owner許可權。
- 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角色管理文件。
綜上,豬齒魚的許可權體系相對完善,豬齒魚使用者不僅可以一鍵分配或回收角色許可權,方便快捷地進行許可權管理;也可建立自定義角色,進行更細粒度的許可權控制,滿足自身的定製化需求。
如果您想嘗試豬齒魚的許可權體系,歡迎您申請試用豬齒魚: https://choerodon.com.cn/#/iam/register-organization
參考文件
- 豬齒魚產品手冊連結:https://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
- RBAC模型: https://blog.csdn.net/qq_28988969/article/details/100995546
- RBAC的組成:https://zhuanlan.zhihu.com/p/158752542
- HZERO角色管理: https://open.hand-china.com/document-center/doc/component/161/16062?doc_id=154878&doc_code=28929
本文由豬齒魚技術團隊原創,轉載請註明出處