RBAC應用最爲廣泛的權限管理模型,核心的三要素是:賬戶、角色、權限,但並不僅僅侷限於這三個核心要素,基於企業規模、用戶規模、運維複雜度,RBCA其實是有很多的變種。從理論角度,有所謂的RBAC0、RBAC1、RBAC2、RBAC3等變種,這裏就不講這些理論,大家一搜就能明白,我按照演化的思路去看下RBAC的變化。
1、基本的RBAC模型
RBAC的核心就是在用戶和權限中間增加角色這一層級,提升了權限體系的擴展性。取消了用戶和權限的直接關聯,改爲通過用戶關聯角色、角色關聯權限的方法來間接地賦予用戶權限,從而達到用戶和權限解耦的目的。
如果沒有角色的概念,系統中每加入一個用戶,就需要爲這個用戶配置一遍權限,下圖是wiki中直接爲用戶權限管理方式,可以看出管理成本巨大。
而引入“角色”概念後,如下圖即是RBAC模型中最基本的模型:用戶與角色可爲多對一或多對多的關係,當一個用戶的角色爲多對多時,當前用戶的權限是多個角色的並集。
此時只需要爲角色賦予權限,能夠大大減輕管理負擔,同時將用戶與權限解耦,提供更大的靈活性。
2、提升賬戶賦權的靈活性:引入崗位概念的RBAC模型
在大型平臺的應用上,試想如果用戶量上萬,新增一個角色時,可能需要爲大量用戶都分配一遍新的角色,工程量仍然巨大,此時即可以引入崗位的概念,崗位是多個角色的合集。如果部分用戶的使用場景是相對一致和基礎的,我們可以把這些用戶打包成一個組,基於崗位的對象進行角色和權限的賦予。
再次驗證了,提升產品的擴展性和靈活性,增加一層就好。
3、提升權限運維的便捷性:引入權限組概念的RBAC模型
同理如果權限較多時也會存在一樣的問題,處理方式是引入權限組的概念,將使用場景相對固定的一組功能或權限打包成組賦予角色。但是一般來講一個系統中權限功能的體量是相對有限和可控的,所以實際應用中對權限組的使用較少。
4、集團型企業組織數據的隔離:引入組織的RBAC模型
通過角色所綁定的組織,來決定賬戶能訪問的數據範圍,這也是2B類ERP所採用的方法。
附:RBAC在維基百科的模型
多組織訪問能力
上圖的角色和組織是一對一,也就是一個角色只能訪問一個組織,想要訪問其他組織,就得切換新的角色,用戶體驗不好。
Oracle EBS有一個很好地功能就是多組織(MO,Multi Org),通過一些配置,可以選擇角色是單組織或是多組織,如果是多組織,這個角色在不用切換的情況下就能訪問多個組織的數據。
附:多年前,畫的Oracle EBS職責與組織的關係腦圖。
6、進一步擴展,員工和賬戶的關聯
很好理解,賬戶不一定代表員工,可能是一個虛擬的賬號,對於大型企業有精細化管理的要求,需要把賬號和HR中的員工進行關聯,那就可以再增加一層員工。
7、權限的拆分與設計
通過RBAC模型已經能夠很好的搭建起用戶、角色與權限之間的關係了,但具體權限其實還沒有展開。對於一般的系統,權限包括:頁面權限、操作權限、數據權限
但具體是什麼樣的關係,以及“權限”這個抽象的概念具體如何規劃?這些都需要分析清楚才能進一步設計出完善的權限系統。首先需要知道,一般產品的權限由頁面、操作和數據構成。頁面與操作相互關聯,必須擁有頁面權限,才能分配該頁面下對應的操作權限。數據可被增刪改查。
整體關係如下圖所示:
示例
參考
NITST Model For Role-Based Access Control