SaaS系統的權限管理

3 評論 6344 瀏覽 99 收藏 11 分鐘

提到權限管理,自然離不開RBAC模型。怎么理解RBAC模型呢?這篇文章里,作者結合自己的思考,探討了RBAC模型的分類,及RBAC模型之外的數據權限。一起來看看本文的闡述。

最近在設計一套面向票據中介的金融SaaS系統,又是一個從0到1的項目。雖然只是完成了第一期的設計,但是在系統設計的過程中有很多思考,權限管理就是其中重大的一環。權限管理作為系統的根基,就如房子的地基一樣,是重中之重。如果地基不穩固,那么房子就可能要拆掉重建,而系統就有可能需要重構或者二次開發,非常浪費時間和精力。在系統設計之初,最好就按照未來公司‘做大做強’的規劃進行設計,以保證這塊功能的長期可用性。

權限管理,一言蔽之就是‘讓不同的系統用戶有不同的權限去看和操作’。在C端產品中,就如boss直聘,普通會員和付費會員在app中就會有不同的權限,就如之前寫的文章《 BOSS直聘買VIP有用嗎?》一樣,平臺會對普通會員和付費會員設置不同權限,以滿足運營需求(只是有些甚是雞肋,攤手);

而在面向企業經營的B端產品中,對于公司員工而言,就是讓不同的部門和員工有不同的權限,就如運營部門和銷售部門的權限是會不同的,而一線銷售人員和銷售總監的權限又是不同的。

說到權限管理,自然離不開RBAC模型。那么,什么是RBAC模型呢?

一、什么是RBAC模型?

RBAC模型(Role-Based Access Control)就是基于角色的訪問控制。它基于“角色”這一核心理念,將用戶權限的管理和分配與用戶的具體身份解耦合,從而簡化權限管理,以便維護和擴展。

簡單來說,就是我將系統權限賦予‘角色’,用戶再繼承角色來獲取權限。用類圖來表示他們之間的關系的話,如下圖:

  • 一個用戶可以有0到多個角色。
  • 一個角色可以分配給0到多個用戶。
  • 一個角色可以有0到多個權限。
  • 一個權限可以分配給0到多個用戶。

當今的大部分B端系統的權限管理都會涉及到RBAC模型,只是功能的繁簡程度不同而已。

二、RBAC模型的分類

RBAC模型分為RBAC0、RBAC1、RBAC2和RBAC3這四種,其中RBAC0為這四種分類中的基礎,其他三類均是RBAC0基礎上的變形。

1. RBAC0基本模型

我們先來聊聊RBAC模型中的基礎,RBAC0模型。

RBAC0是基于角色的訪問控制的完美體現,也就是把權限賦予角色,然后再把角色賦予用戶,很多B端系統都是基于RBAC0搭建的權限管理。

從系統設計角度來說,角色管理設計也比較簡單,如下圖:

只需給對應的角色配置系統中的權限(菜單/操作/字段),完成角色創建后,再將角色賦予系統用戶即可。這樣在用戶登錄后,就能獲取該用戶的所屬角色,然后通過角色來找到擁有的權限,再加載對應的權限資源。

完成RBAC0基本模型的搭建,基本就能滿足當下絕大部分系統的權限管理的需求。

但是,如果一個部門人員很多,就如我前司,一級部門向下還有二級部門,二級部門向下才是員工,這樣就導致如果采用RBAC0模型進行權限管理的話,則很有可能錯配權限的問題。

那么,有什么方案解決呢?

有!那就是RBAC1角色分層模型。

2. RBAC1角色分層模型

RBAC1模型相較于RBAC0模型增加了角色繼承的概念,有了角色繼承就有父子的關系,即子角色可擁有父角色的權限。

從系統設計角度來看,如下圖:

在配置角色的時候可以增加父角色的選擇,可在父角色的基礎上進行刪減權限,以避免錯配權限的問題。

在RBAC1模型中,我認為主要解決的就是同部門不同層級人員權限配置問題,以達到精準和快速配置權限。

就比如金融本部有一級部門負責人、二級部門負責人、小組長和專員,這樣就可以在完成一級部門負責人的權限配置之后,再在一級部門負責人的基礎上配置其他角色的權限,以實現其他角色的權限均在一級部門負責人的權限之內。

3. RBAC2角色限制模型

RBAC2模型是RBAC0的另一變種,對用戶、角色和權限三者之間增加了一些限制。這些限制可以分成兩類,即靜態職責分離SSD(Static Separation of Duty)和動態職責分離DSD(Dynamic Separation of Duty)。

靜態職責分離:

  • 互斥角色限制:一個用戶不能同時分配互斥角色中的多個角色,即只能選擇一個。
  • 基數限制:一個用戶擁有的角色是有限的。
  • 先決條件限制:一個用戶想獲得更高級的角色,首先需先擁有低級角色。

動態職責分離:

動態限制:一個用戶可以擁有兩個角色,但是運行時只能激活一個角色。

其實RBAC2模型在我歷史經歷的系統中基本沒有應用到了,靜態和動態職責分離的限制條件,我感覺只滿足了5%或者更少的應用場景。如果讀者有設計過包含此模型的系統,也可和我溝通交流,我倒是想知道誰家這么變態。

4. RBAC3統一模型

RBAC3=RBAC1+RBAC2,既包含了角色分層,也包含了角色限制,不贅述。

三、RBAC模型之外的數據權限

就如文中所說,其實RBAC0基礎模型已經滿足了絕大部分的應用場景,是應該掌握的,其他三個模型了解即可。在RBAC模型之外,我想再聊聊數據權限。

角色管理系統中的資源,資源包括菜單(頁面)權限、操作(按鈕)權限和字段權限。那么,數據權限要通過什么進行管理?

沒錯,就是組織架構。通過角色管理用戶在系統中能使用的資源,然后通過組織架構管理用戶能看到的數據范圍,這樣就完整的搭建了SaaS系統的權限管理。

為什么通過組織架構能管理數據權限?

一般大型企業都是全國性質的,就如我的前司,作為中國頭部的物流公司,產生的物流單是全國范圍的,那么不同區域/不同層級對于數據的管理需求也就順其自然產生了。

那么通過‘訂單+門店’和組織架構就能管理數據權限,訂單產生于不同的門店,不同的門店又隸屬于不同的組織架構之下,不同的用戶再在系統中配置對應的部門,即可實現數據權限。

這里為了數據權限控制的靈活度,在角色管理中還可以設置角色的數據權限范圍,如下圖:

數據權限可以限制為‘本人/本部門/下級部門/本部門和下級部門/自定義部門/全部’等屬性,以控制用戶對于不同范圍的數據查看權限。

思考

以上就是SaaS系統的管理的全部內容,我認為‘RBAC0模型+數據權限’就可滿足系統可見發展范圍內的權限管理需求了。

當公司發展到一定程度,內部孵化的項目系統也會越來越多,那么將權限管理抽離,抽象成單獨的「統一授權平臺」也勢在必行。

用統一的權限管理平臺進行管理不同系統的權限,這部分的輪子抽象后是可以復用的。讀者們也可以思考下要實現這部分的功能,要將系統的哪些模塊進行抽離才可實現。

本文由@沒湯圓啦 原創發布于人人都是產品經理。未經許可,禁止轉載。

題圖來自 Unsplash,基于 CC0 協議

該文觀點僅代表作者本人,人人都是產品經理平臺僅提供信息存儲空間服務。

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 用戶進入菜單后看不到想看的數據時,什么方式去提醒用戶他沒有數據權限比較好?

    來自上海 回復
    1. 你這個看不到想看的數據應該有一個定義,如果是有入口,那就簡單,點擊時直接提示就行。如果連入口都沒有,那得針對用戶所在角色或者崗位另外有培訓,讓他們知道哪些是他們能看到的。

      來自上海 回復
  2. 字段權限是什么?

    來自福建 回復