B端產品之權限設計(RBAC權限模型)

22 評論 25085 瀏覽 399 收藏 21 分鐘

編輯導語:在B端管理系統中,“權限管理”是必不可少的功能,不同的系統中權限的應用復雜程度不一樣,要根據實際產品以及需求而設置合理的權限。本文作者通過介紹RBAC權限模型的概念,結合實際案例,對B端產品的權限設計進行了分析,一起來看一下吧。

隨著互聯網的快速發展,B端行業也逐漸崛起,很多企業管理中使用的軟件我們通常稱其為B端管理系統,而在B端系統中“權限管理”是必不可少的功能,不同的系統中權限的應用復雜程度不一樣,都是根據實際產品以及需求情況而設置合理的權限。

而我們現在對于權限的設置基本上都是建立在RBAC權限模型上的、擴展的,下面我會通過介紹RBAC權限模型的概念,以及結合實際業務情況列舉權限設置的應用。

一、什么是RBAC權限模型?

RBAC是Role-BasedAccess Control的英文縮寫,意思是基于角色的訪問控制。RBAC認為權限授權實際上是Who、What、How的問題。在RBAC模型中,who、what、how構成了訪問權限三元組,也就是“Who對What進行How的操作,也就是“主體”對“客體”的操作。其中who是權限的擁有者或主體(例如:User、Role),what是資源或對象(Resource、Class)。

簡單的理解其理念就是將“角色”這個概念賦予用戶,在系統中用戶與權限之間通過角色進行關聯,以這樣的方法來實現靈活配置。

RBAC其實是一種分析模型,主要分為:基本模型RBAC0、角色分層模型RBAC1、角色限制模型RBAC2和統一模型RBAC3。

RBAC權限模型是基于角色的權限控制。模型中有幾個關鍵的術語:

  • 用戶:系統接口及訪問的操作者
  • 權限:能夠訪問某接口或者做某操作的授權資格
  • 角色:具有一類相同操作權限的用戶的總稱

1. RBAC0

RBAC0是RBAC權限模型的核心思想,RBAC1、RBAC2、RBAC3都是在RBAC0上進行擴展的。RBAC0是由四部分構成:用戶、角色、會話、許可。

用戶和角色的含義很簡單,通過字面意思即可明白,會話:指用戶被賦予角色的過程,稱之為會話或者是說激活角色;許可:就是角色擁有的權限(操作和和被控制的對象),簡單的說就是用戶可使用的功能或者可查看的數據。

用戶與角色是多對多的關系,用戶與會話是一對一的關系,會話與角色是一對多的關系,角色與許可是多對多的關系。

B端產品之權限設計(RBAC權限模型)

2. RBAC1

RBAC1是在RBAC0權限模型的基礎上,在角色中加入了繼承的概念,添加了繼承的概念后,角色就有了上下級或者等級關系。

B端產品之權限設計(RBAC權限模型)

舉例:集團權責清單下包含的角色有:系統管理員、總部權責管理員、區域權責管理員、普通用戶,當管理方式向下兼容時,就可以采用RBAC1的繼承關系來實現權限的設置。上層角色擁有下層的所有角色的權限,且上層角色可擁有額外的權限

B端產品之權限設計(RBAC權限模型)

3. RBAC2

RBAC2是在RBAC0權限模型的基礎上,在用戶和角色以及會話和角色之間分別加入了約束的概念(職責分離),職責分離指的是同一個人不能擁有兩種特定的權限(例如財務部的納入和支出,或者運動員和裁判員等等)。

用戶和角色的約束有以下幾種形式:

  • 互斥角色:同一個用戶在兩個互斥角色中只能選擇一個(也會存在一個用戶擁有多個角色情況,但是需要通過切換用戶角色來實現對不同業務操作)
  • 基數約束:一個用戶擁有的角色是有限的,一個角色擁有的許可也是有限的
  • 先決條件約束:用戶想要獲得高級角色,首先必須擁有低級角色

會話和角色之間的約束,可以動態的約束用戶擁有的角色,例如一個用戶可以擁有兩個角色,但是運行時只能激活一個角色。

B端產品之權限設計(RBAC權限模型)

例如:iconfont和藍湖的用戶與角色就采用了約束的概念,超級管理員只允許只有一個

B端產品之權限設計(RBAC權限模型)

B端產品之權限設計(RBAC權限模型)

4. RBAC3

RBAC3是RBAC1與RBAC2的合集,所以RBAC3包含繼承和約束。

B端產品之權限設計(RBAC權限模型)

二、為什么要引用RBAC權限模型?

RBAC中具有角色的概念,如果沒有角色這個概念,那么在系統中,每個用戶都需要單獨設置權限,而系統中所涉及到的功能權限和數據權限都非常多,每個用戶都單獨設置權限對于維護權限的管理員來說無疑是一件繁瑣且工作量巨大的任務。

而引入角色這個概念后,我們只需要給系統設置不同的角色,給角色賦予權限,再將用戶與角色關聯,這樣用戶所關聯的角色就直接擁有了該角色下的所有權限。

例如:用戶1~用戶8分別擁有以下權限,不同用戶具有相同權限的我用不同的顏色做了區分,如下圖:

B端產品之權限設計(RBAC權限模型)

在沒有引入RBAC權限模型的情況下,用戶與權限的關系圖可采用下圖的楊叔叔展示,每個用戶分別設置對應的權限,即便是具有相同權限的用戶也需要多次設置權限。

B端產品之權限設計(RBAC權限模型)

引入RBAC權限模型及引入了角色的概念,根據上面表格的統計,用戶1、用戶3、用戶5、用戶8擁有的權限相同,用戶2、用戶6、用戶7擁有相同的權限,用戶4是獨立的權限,所以我們這里可以根據數據統計,以及實際的需求情況,可以建立三個不同的角色,角色A、角色B、角色C,三個角色分別對應三組用戶不同的權限,如下圖所示:

B端產品之權限設計(RBAC權限模型)

對應的上面的案例表格我們就可以調整為含有角色列的數據表,這樣便可以清楚的知道每個用戶所對應的角色及權限。

B端產品之權限設計(RBAC權限模型)

B端產品之權限設計(RBAC權限模型)

通過引用RBAC權限模型后,對于系統中大量的用戶的權限設置可以更好的建立管理,角色的引入讓具有相同權限的用戶可以統一關聯到相同的的角色中,這樣只需要在系統中設置一次角色的權限,后續的用戶便可以直接關聯這些角色。

這樣就省去了重復設置權限的過程,對于大型平臺的應用上,用戶的數量成千上萬,這樣就可避免在設置權限這項工作上浪費大量的時間。

三、引入用戶組的概念

我們依舊拿上面表格案例舉例,雖然前面我們應用的RBAC權限模型的概念,但是對于大量用戶擁有相同權限的用戶,我們同樣的也需要對每個用戶設置對應的角色,如果一個部門上萬人,那么我們就需要給這個部門上萬人分別設置角色。

而這上萬其實是具有相同的權限的,如果直接采用基礎的RBAC權限模型的話,那么面對這樣的情況,無疑也是具有一個龐大的重復的工作量,并且也不利于后期用戶變更的維護管理,那么針對相同用戶具有相同的權限的情況,我們便可以引入用戶組的概念。

什么是用戶組呢?用戶組:把具有相同角色的用戶進行分類。

上面我們的數據表格案例中的用戶1、用戶3、用戶5、用戶8具有相同的角色A,用戶2、用戶6、用戶7也擁有相同的角色B,那么我們就可以將這些具有相同角色的用戶建立用戶組的關系,拿上面的案例,我們分別對相同角色的用戶建立組關系,如下:

  • 用戶1、用戶3、用戶5、用戶8→建立用戶組1
  • 用戶2、用戶6、用戶7→建立用戶組2

因為用戶4只有一個用戶,所以直接還是單獨建立用戶與角色的關系,不需要建立用戶組,當然盡管只有一個用戶也是可以建立用戶組的關系,這樣有利于后期其他用戶與用于4具有相同的角色時,就可以直接將其他用戶添加到這個用戶組下即可,根據業務的實際情況而選擇適合的方案即可。

B端產品之權限設計(RBAC權限模型)

B端產品之權限設計(RBAC權限模型)

通過案例表格的變化我們就可以直觀的看出權限設置變得清晰簡潔了,通過對用戶組賦予角色,可以減少大量的重復的工作,我們常見的企業組織、部門下經常會出現不同用戶具有相同角色的情況,所以采用用戶組的方式,便可以很好地解決這個問題。

給具有相同權限的用戶建立用戶組,將用戶組關聯到對應的角色下,此用戶組就擁有了此角色下的所有權限,而用戶是屬于用戶組的,所以用戶組下的所有用戶也就同樣的擁有了此角色下的所有權限。一個用戶可以屬于多個用戶組,一個用戶組也可以包括多個用戶,所以用戶與用戶組是多對多的關系。

四、引入權限組的概念

權限組與用戶組的原理差不多,是將一些相對固定的功能或者權限建立組的關系,然后再給此權限組賦予角色,目前我所接觸的B端項目中使用權限組的概念的比較少,可簡單地看一下關系圖:

B端產品之權限設計(RBAC權限模型)

B端產品之權限設計(RBAC權限模型)

五、功能權限和數據權限

B端系統中一般產品的權限由頁面、操作和數據構成。頁面與操作相互關聯,必須擁有頁面權限,才能分配該頁面下對應的操作權限,數據可被增刪改查。所以將權限管理分為功能權限管理和數據權限管理。

  • 功能權限管理:指的是用戶可看到那些模塊,能操作那些按鈕,因為企業中的用戶擁有不同的角色,擁有的職責也是不同的。
  • 數據權限管理:指的是用戶可看到哪些模塊的哪些數據。

例如:一個系統中包含多個權責清單(清單1、清單2、清單3),系統管理員能對整個系統操作維護,也就可以對系統中的所有清單都能操作(增、刪、改、查);假如分配給總部權責管理員的是清單1,那么他將只能對清單1進行操作(增、改、查);普通用戶也許只有查看數據的權限,沒有數據操作的權限(查),這里的操作是系統中所有可點擊的按鈕權限操作,列舉的增刪改查只是最常見的幾種操作而已。

B端產品之權限設計(RBAC權限模型)

六、實戰案例總結

我目前所做的項目是一個關于權責管理平臺的B端系統,關于系統中的權限需求我這里簡單的介紹一下,并采用上面所總結的RBAC權限模型對實際業務需求進行設計分析:

  1. 不同的區域管理員的權限各不相同(說明會存在不同的用戶具有不同的權限,那么我們就可以采用角色對其進行規范)
  2. 有大量的用戶具有相同的權限(例如組織、部門等)(說明存在相同權限的用戶,那么我們就可以采用用戶組的概念)
  3. 上級管理員擁有下級人員的所有權限(說明存在繼承關系)
  4. 不同用戶所看到的數據和能編輯的數據不同,一些機密性的數據只允許部分人員看或者編輯(說明存在約束)
  5. 會存在臨時性的用戶(說明需要支持新建新角色)
  6. 同一用戶會存在多個角色(多角色求合集或者切換用戶角色)

簡單說明一下,我所做這個項目的人員管理是在另外一個系統中管理的,權責平臺只是調用另外一個平臺的組織結構樹即可,所以權限設置模塊沒有做人員管理的模塊。

根據上面對需求的分析,整個權限管理模塊中我們需要建立用戶組管理模塊、功能角色管理模塊、業務(數據)管理模塊、權限設置模塊,下面就對每個模塊做更細致的頁面展示設計分析。

1. 用戶組管理模塊

用戶組管理主要是對具有相同權限的用戶分類建組,所以頁面中我們需要有新建用戶組的功能,每個用戶組下我們需要關聯對應的組織、部門、崗位、人員,讓這些具有相同權限的用戶在同一個用戶組下,如下圖:

B端產品之權限設計(RBAC權限模型)

2. 功能角色管理模塊

B端項目中一般會建立幾個默認的角色是不支持用戶修改、刪除的,例如最常見的系統管理員,而也會需要有其它角色的需求,所以此模塊需要支持用戶新建角色,功能角色是對大模塊的頁面和操作的權限設置,操作權限的顆粒度可以細分到每個頁面的每一個按鈕的操作,如下圖:

B端產品之權限設計(RBAC權限模型)

3. 業務(數據)角色管理模塊

業務角色是對頁面中的數據查看的權限設置,而對于系統中的普通用戶查看系統的權限是常用不變的,所以我們考慮默認有一個普通用戶的角色,其它業務角色用戶根據實際需求情況自行建立即可。

由于我們權責系統的特殊性,我們需要滿足用戶對部分數據可編輯且對部分數據的字段可編輯,按照常理來說,編輯的操作行為是屬于功能權限的設置,但是這里的操作行為是建立在數據的基礎之上的,所以如果把這里對數據的操作權限在功能角色模塊中設置,就會顯得混亂。

所以我們直接在業務角色模塊中加入對數據的可編輯權限,這里在設置的時候更方便靈活。

B端產品之權限設計(RBAC權限模型)

B端產品之權限設計(RBAC權限模型)

4. 權限設置模塊

權限設置模塊只需要設置權限分配的對象,選擇對應的用戶或者用戶組,關聯對應的功能角色和業務(數據)角色即可,這樣就形成了一條完整的閉環的權限設置。

B端產品之權限設計(RBAC權限模型)

對于06同一用戶會存在多個角色,我們系統是采用切換角色的模式來實現的,因為不同角色中存在互斥的情況,以及所涉及的領域不同,操作權限差距較大,求合集不利于控制權限,所以只能采用切換的模式實現。

七、總結

權限設置是B端項目必不可少的模塊,也是令設計師頭疼的一件事,但是只要理清楚實際的業務需求,合理運用RBAC權限設置的原理,其實也沒那么難,關于權限設置的分享就到這來了,希望對處于B端設計的小伙伴有所幫助,也歡迎大家和我一起討論關于設計的有趣事情哦!

 

本文由 @設計小余 原創發布于人人都是產品經理。未經許可,禁止轉載

題圖來自Unsplash,基于 CC0 協議

本文由 @設計小余 原創發布于人人都是產品經理。未經許可,禁止轉載

題圖來自Unsplash,基于 CC0 協議

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

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 沒必要劃分用戶組,角色就夠了。用角色定義用戶對所有實例的功能權限、組織權限、數據權限(分列表、頁面、字段),再復雜的還有分享數據的權限管理,包括系統管理員角色對組織、用戶、角色的管理。權限約束用角色+組織就可以實現。用戶量大,總部管理員可授權各級組織的管理員來處理。
    另外,通過崗位調整自動授權的方式,在多級銷售組織中很容易出錯的,比如部門下的小組,在HR行政組織中是沒有的。要區分行政組織、業務組織、財務組織、虛擬組織的。

    來自中國 回復
    1. 權限設置確實是有簡單的也有比較復雜的,不過都需要根據產品具體需求和應用場景去選擇適合的方案,我這里也是根據自己在工作中所接觸的真實項目而分享的一種權限設置方案哈,大家合理參考

      來自廣東 回復
  2. 有點沒看明白,既然角色跟用戶組是1V1的關系,為啥還有用戶組的概念;
    新進的單個數據,可以之間配角色,批量導入的數據直接在導入表中加入角色的字段不是可以實現用戶組的概念么…我還是沒想明白,期望有大佬可解答,這個用戶組到底能解決啥場景跟問題

    來自中國 回復
    1. +1,理解下來其實角色就是用戶組,1角色對應同一批組織

      來自江蘇 回復
    2. 角色是系統中設置的功能角色或者業務數據角色(功能角色例如:系統管理員、區域管理員、瀏覽者等等,是對系統中功能做權限管理的,業務數據角色是對系統中業務數據設置的角色,是針對系統中數據做管理的,例如一個權責清單,清單中包含數萬條數據,不同用戶維護的數據量不同,例如系統管理員可以維護和查看全量數據,而區域管理員只能維護和查看屬于自己區域的數據。)
      用戶組:是對具有相同權限的用戶創建組的概念,例如:某區域的多個普通員工具有相同的數據和功能權限,這樣就可以直接將這些普通員工創建用戶組,一次性設置所有員工的功能角色和業務數據角色)方便維護

      來自廣東 回復
    3. 在實際業務中同樣都是部門主任,他們同一角色,但是職能是不一樣的,就需要劃分a單位主任組,b單位主任組,來分配角色,方便管理,當然 也可以直接將這批人分成x角色,但是維護時候這個角色下有幾百人,哪些人是一起的一個單位的,都不清楚,比較麻煩。說白了就是把這個角色下的用戶加了個標簽分類。

      回復
  3. 看具體業務需求,ERP 系統權限,比這復雜多了,,所以沒有標準,多余說法,,多去實踐,跨行業競品學習,,

    來自四川 回復
    1. 您舉個例子我們學習下

      來自廣東 回復
    2. 確實真實的業務場景是非常復雜的,也有在同一張表中,部分數據具有查閱權限,部分數據具有編輯權限,還有一部分數據具有新增和、編輯、刪除的權限,雖然在同一張表格中,數據也有不同的權限

      來自廣東 回復
    3. 是的,具體場景,具體設計,不是大而全,搞死人的。
      學多人直覺性點對點不過腦反問,真的需要沉浸式業務學習,體系化了解,

      來自四川 回復
  4. 一個角色足矣,沒有必要拆成功能角色和業務角色,用戶組也是多余

    來自湖北 回復
    1. 對于簡單的業務一個角色確實可以,但是針對復雜的業務需求場景還是有必要拆分

      來自廣東 回復
    2. 一般情況下需要用戶組嗎?目前已遇到這個問題

      回復
    3. 還是需要清楚你的真實業務需求再選擇是否需要用戶組,如果多人具有相同功能角色和業務角色,那么可以考慮用戶組

      來自廣東 回復
    4. 用戶組的概念還是有點多余

      來自中國 回復
    5. 系統用戶幾千人,不同單位,同一崗位角色,這種操作起來如果不分組,那一個角色下面就會出現不同單位的幾百個人,維護起來費事

      回復
  5. 我覺得產品設計過于復雜了

    來自福建 回復
    1. 實際業務場景需要,當然常見的簡單權限設置也不需要這樣考慮用戶組、功能和數據權限分離的情況

      來自廣東 回復
  6. 為啥功能角色和業務角色不能整合一起呢?出現有A頁面權限卻無A頁面數據權限如何處理?依據組織隔離數據的場景如何滿足?

    來自廣東 回復
    1. 具有A頁面的的權限,一般也是針對該頁面的部分數據做權限管理吧,如果單獨開放該頁面的功能權限,卻不開放該頁面的數據權限,就會出現空頁的狀態,一般不會這樣分配設置權限的,實際業務也比較少見

      組織隔離數據就會用到用戶組的概念呀

      來自廣東 回復
  7. 業務角色,和功能角色的差異如何理解

    回復
    1. 業務角色也稱數據角色,是對系統中數據做權限管理,功能角色是對系統中操作功能(增、刪、改等)的權限

      回復