到目前為止,最流行的訪問設計模型是RBAC模型,基於角色的訪問控制。
RBAC-0模型是權限最基本最核心的模型,它包括用戶/角色/權限,其中用戶和角色是多對多的關系,角色和權限也是多對多的關系。
用戶是發起操作的主體,按類型可分為2B和2C用戶。他們可以是後臺管理系統的用戶,OA系統的內部員工,也可以是面向C的用戶,比如阿裏雲的用戶。
角色起到橋梁的作用,連接用戶和權限之間的關系。每個角色可以關聯多個權限,同時壹個用戶關聯多個角色,所以用戶對多個角色有多個權限。
有人可能會問為什麽用戶不直接關聯權限?在用戶基數較小的系統中,比如20人的小系統,管理員可以直接將用戶與權限關聯起來,工作量並不大。只需選擇壹個用戶並檢查所需的權限。
但是在實際的企業系統中,用戶基數比較大,很多都有相同的權限,這是壹種常見的訪問權限。如果管理員給100以上的人授權,工作量是巨大的。
這就引入了“角色”的概念,壹個角色可以關聯多個用戶,管理員只需要把角色交給用戶,那麽用戶就擁有了角色下的所有權限,不僅提高了效率,而且具有很大的擴展性。
權限是用戶可以訪問的資源,包括頁面權限、操作權限和數據權限:
以上是RBAC的核心設計和模型分析,也被稱為RBAC-0,基於核心概念,RBAC還提供了擴展模型。包括RBAC-1、RBAC-2和RBAC-3型號。下面介紹這三種類型。
該模型引入了層次角色的概念,即角色之間具有上下級關系,角色之間的繼承關系可以分為壹般繼承關系和限制繼承關系。
壹般的繼承關系只要求角色繼承關系是絕對的偏序關系,允許角色之間的多重繼承。
受限繼承關系進壹步要求角色繼承關系是樹形結構,實現角色之間的單壹繼承。這種設計可以對角色進行分組和分層,在壹定程度上簡化了權限管理。
在核心模型的基礎上進行角色約束控制,在RBAC2模型中加入職責分離關系。
它規定了將權限賦予角色時,或者將角色賦予用戶時,以及用戶在某壹時刻激活角色時,應該遵循的強制性規則。
責任分離包括靜態責任分離和動態責任分離。主要包括以下約束條件:
即最全面的權限管理,以RBAC-0為基礎,整合了RBAC-1和RBAC-2。
當平臺的用戶基數增加,角色類型增加,並且有些人的屬性相同,比如財務部門的所有員工,如果直接給用戶分配角色,管理員的工作量會很大。
如果將具有相同屬性的用戶劃分到壹個用戶組中,那麽管理員直接為該用戶組分配角色,用戶組中的每個用戶都可以擁有該角色。其他用戶加入用戶組後,可以自動獲得用戶組的所有角色,退出用戶組,也可以撤銷用戶組下的角色,不需要管理員手動管理角色。
根據用戶組是否有上下級關系,可以分為上下級用戶組和普通用戶組:
每個公司都會涉及到組織和崗位,下面重點講這兩個。
我們可以將組織與角色相關聯。用戶加入組織後,會自動獲得組織的所有角色,不需要管理員手動授予,大大減少了工作量。同時,用戶可以通過調整組織來批量調整角色。
組織的另壹個功能是控制數據權限,將角色與組織關聯起來,這樣角色只能看到該組織下的數據權限。
每個組織部門下面會有多個職位,比如財務部門的總監、會計、出納等職位。雖然都在同壹個部門,但是每個職位的權限是不壹樣的,職位越高權限越大。
主任有全部權限,會計和出納也有壹定權限。在特殊情況下,壹個人可能會身兼數職。
根據上述場景,可以設計壹個新的權限模型,如下圖所示:
根據系統的復雜程度,多對多關系和壹對壹關系可能會發生變化。
授權就是授予用戶壹個角色,按照流程可以分為手工授權和審批授權。權限中心可以同時配置兩者,可以提高授權的靈活性。
有了上面的權限模型,設計表結構就不難了。以下是多系統下的表格結構。簡單設計下,主要提供思路:
在項目中可以使用其中的壹種框架,它們的優缺點以及如何使用將在後面的文章中詳細介紹。
權限系統可以說是整個系統中最基礎的,但也可以很復雜。在實際項目中,會出現多系統、多用戶類型、多使用場景,需要具體問題具體分析,但核心的RBAC模型是不變的,我們可以根據需要進行擴展。