總結:SAAS后臺權限設計案例分析
saas平臺由于其本身“按需購買”的特性,在設計規劃權限時,需要考慮統一配置權限如何規避企業沒有購買的應用,以及如有部分應用存在數據權限不同的問題?,F在,本文簡單總結一下當前saas模式下權限的幾種設計方式。
作為一個B端平臺型產品,系統的權限設計是其中一個非常重要的組成部分,沒有權限管理的系統仿佛一個沒有門的房子,任何人都可以隨意查看甚至調整,對系統的安全性存在非常大的隱患,而saas模式下由于應用基本獨立,隨時可能被企業拆分使用。
這里權限的統一與拆分問題也十分重要,本文簡單總結一下當前saas模式下權限的幾種設計方式。
一、權限管理的重要性
權限管理一般指根據系統設置的安全規則或者安全策略,用戶可以訪問而且只能訪問自己被授權的資源,權限管理基本是任何一個系統的標配模塊。它的作用不僅在于保護系統數據安全性、防止留下系統漏洞,更能在龐大的系統下進行模塊和數據配置,讓不同的角色進入系統看到不同的模塊和數據,最大程度地提高系統的易用性。
大部分系統中權限管理是作為一個獨立的管理入口,統一設置所有的業務的權限。而saas平臺由于其本身“按需購買”的特性,在設計規劃權限時,需要考慮統一配置權限如何規避企業沒有購買的應用,以及如有部分應用存在數據權限不同的問題。
二、抽象權限組成
權限到底是名詞屬性還是動詞屬性,還是名詞、動詞屬性均包含,這對于權限的含義很重要。如果是名詞屬性的話,那么它應該是有具體的指代物;如果是動詞,則應該具有行為表示。
- 權限的名詞屬性:api接口、頁面、功能點。
- 權限的動詞屬性:可操作、不可操作。
那么我們現在來看,其實權限是名詞、動詞屬性,它一定是表達了兩層含義。即控制的對象、操作。
向上引申可將權限劃分為3個組成部分:
- 頁面權限:用戶可以看到那些頁面;
- 操作權限:用戶可以在頁面內進行那些操作,增刪改查等;
- 數據權限:用戶可以看到那些數據或內容;
三、常見的權限控制模型
(1)自主訪問控制(DAC:Discretionary Access Control)
系統會識別用戶,然后根據被操作對象(object)的權限控制列表(ACL:Access Control List)或者權限控制矩陣(ACL:Access Control Matrix)的信息來決定用戶的是否能對其進行哪些操作,例如讀取或修改。而擁有對象權限的用戶,又可以將該對象的權限分配給其他用戶,所以稱之為“自主(Discretionary)”控制。
DAC最大缺陷就是所有用戶的權限不能統一管理,用戶和用戶的權限比較分散,后期調整只能單個進行調整,不易維護。
(2)強制訪問控制(MAC:Mandatory Access Control)
在MAC的設計中,每一個對象都都有一些權限標識,每個用戶同樣也會有一些權限標識,而用戶能否對該對象進行操作取決于雙方的權限標識的關系,這個限制判斷通常是由系統硬性限制且無法回避的。強制訪問控制多應用于對安全性要求比較高的系統,如多級安全軍事系統;
(3)基于角色的訪問控制(RBAC:Role-Based Access Control)
RBAC是我們當前使用范圍最廣的一種權限設計模型,模型基礎就是用戶和角色,角色和權限做多對多的對應。標準的RBAC模型包括四個部件模型,分別為基本模型RABC0、角色分級模型RABC1、角色限制模型RABC2、統一模型RABC3。
- RBAC0(基本模型)定義了完全支持RBAC概念的任何系統的最低需求。RBAC0的模型中包括用戶(U)、角色(R)和許可權(P)等3類實體集合,RABC0是權限管理的核心部分,其他的版本都是建立在0的基礎上。
- RBAC1(角色分級模型)基于RBAC0模型,引入角色間的繼承關系,即角色上有了上下級的區別,角色間的繼承關系可分為一般繼承關系和受限繼承關系。一般繼承關系僅要求角色繼承關系是一個絕對偏序關系,允許角色間的多繼承。而受限繼承關系則進一步要求角色繼承關系是一個樹結構,實現角色間的單繼承。這種模型合適于角色之間的層次明確,包含明確。
- RBAC2(角色限制模型)引入了角色間的約束關系,主要約束規則包括:角色間的互斥關系,在處理用戶和這些角色之間的關系時,包括靜態分離和動態分離,靜態分離指互斥的角色不能同時賦予同一個用戶;動態分離指用戶不能同時操作兩個互斥的角色進行登錄。
- RBAC3(統一模型)同時包含了1和2的特性。
如圖所示,每個用戶關聯一個或多個角色,每個角色關聯一個或多個權限,從而可以實現了非常靈活的權限管理。角色可以根據實際業務需求靈活創建,這樣就省去了每新增一個用戶就要關聯一遍所有權限的麻煩。
簡單來說RBAC就是:用戶關聯角色,角色關聯權限。并且在產品和數據設計層面,有更好的擴展性,可控制到任意的粒度。
(4)基于屬性的權限驗證(ABAC:Attribute-Based Access Control)
ABAC則是通過動態計算一個或一組屬性,來是否滿足某種條件來進行授權判斷(可以編寫簡單的邏輯)。屬性通常來說分為四類:用戶屬性(如用戶年齡),環境屬性(如當前時間),操作屬性(如讀?。┖蛯ο髮傩裕ㄈ缫黄恼拢址Q資源屬性),所以理論上能夠實現非常靈活的權限控制,幾乎能滿足所有類型的需求。該設計過于復雜,暫未參透。
四、基于RBAC權限模型的SAAS平臺權限系統設計
對于SAAS平臺這樣龐大復雜的平臺來說,權限系統設計得越全面、精細、后期的系統擴展性就越高,所以這里采用RBAC權限模型,RBAC權限模型是現有比在這方面比較成熟的權限設計模型,應用這個模型能解決常規的系統權限配置問題,其基本原理也能適用于平臺權限設計。
RBAC對權限抽象概括:判斷【Who是否可以對What進行How的訪問操作(Operator)】
RBAC支持三個著名的安全原則:最小權限原則,責任分離原則和數據抽象原則。
- 最小權限原則之所以被RBAC所支持,是因為RBAC可以將其角色配置成其完成任務所需要的最小的權限集。
- 責任分離原則可以通過調用相互獨立互斥的角色來共同完成敏感的任務而體現,比如要求一個計帳員和財務管理員共參與同一過帳。
- 數據抽象可以通過權限的抽象來體現,如財務操作用借款、存款等抽象權限,而不用操作系統提供的典型的讀、寫、執行權限。然而這些原則必須通過RBAC各部件的詳細配置才能得以體現。
——來自百度百科
以某物業公司內部信息平臺為例,該物業公司平臺分為客戶檔案、房產檔案、收費系統、客服工單等多應用結構,其中物業公司組織架構為多層級,基本樣式如下如。
組織架構
應用入口
功能頁面
以上我們可以將:
- 組織架構=數據權限
- 應用入口以及應用菜單=頁面權限
- 功能操作點=操作權限
1. 基本模型:RBAC0
抽取角色,建立角色與用戶的關系。
這里的角色主要是指在組織內承擔特定的業務活動,并和別的業務角色進行交互的業務角色。業務角色的抽取主要有兩種方式:一種是直接和崗位對應,另外一種是根據流程的本質和需要定義角色。
確定各角色的用例圖,如下圖(簡單示例):
根據業務復雜度、用戶特點進行原型草圖設計,在進行權限分配時,可以從增加角色維度以及增加用戶維度。如下圖:
新建角色維度
新建用戶維度
使用此模型時,我們需要注意的問題有:
- 用戶和角色為多對一的關系,如果需要用到多對多的關系,將涉及到角色關系的處理,此模型并不適用。
- 權限一定是動態可配置的,不是靜態的,這點一定要在著手開發前進行說明,一般情況,權限的數據結構為樹形,合理的數據結構,便于前端根據實際需求進行解析;
- 人員在選擇角色獲取到對應的權限數據后,最好可以提供一個二次編輯界面,權限會更加靈活。
2. 角色分級模型:RBAC1
RBAC1基于RBAC0模型,引入角色間的繼承關系,即角色上有了上下級的區別,角色分級模型適用于平臺業務功能較多,單個角色設置操作過于繁瑣,引用角色分級,可讓角色之間存在繼承或被繼承的關系,比如客服主管可直擁有下級所有員工擁有的權限。
建立角色管理,確定角色跟用戶之間的關系。(要求角色間有明顯的層級關系,所以在沒有其他需求的情況下,這里根據業務部門和崗位進行角色的抽取)
建立角色層級關系和繼承關系。
角色層級關系
一般繼承關系
受限繼承關系
給角色賦予權限(應用入口權限——應用頁面權限、應用頁面中操作功能權限、數據查看權限。)權限賦予同RBAC0。
增加一個角色管理。如下圖:
通過角色管理即可以將下級角色的權限直接賦值給上級權限,但由于低級角色的權限全部被高級角色繼承,就會導致沒有自己角色的私有權限;也可以為人員提供一個二次編輯權限界面,但是一旦編輯后,若后續所屬角色權限發生變化,會直接覆蓋原有編輯后的權限。
3. 角色限制模型:RBAC2
RBAC2,它是RBAC的約束模型,RBAC2也是建立的RBAC0的基礎之上的,在RBAC0基礎上假如了約束的概念,主要引入了靜態職責分離SSD(Static Separation of Duty)和動態職責分離DSD(Dynamic Separation of Duty)。
SSD是用戶和角色的指派階段加入的,主要是對用戶和角色有如下約束:
- 互斥角色:同一個用戶在兩個互斥角色中只能選擇一個;
- 基數約束:一個用戶擁有的角色是有限的,一個角色擁有的許可也是有限的;
- 先決條件約束:用戶想要獲得高級角色,首先必須擁有低級角色。
DSD是會話和角色之間的約束,可以動態的約束用戶擁有的角色,如一個用戶可以擁有兩個角色,但是運行時只能激活一個角色。
角色權限配置界面可參照RBAC0。
用戶在配置角色或角色下新建添加用戶時,需要根據用戶已有的角色身份進行判斷。示例:用戶A配置角色為客服組長,則可繼續添加角色為客服主管,若客服主管已被分配給他人,則也不能分配給用戶A(遵從最大擁有數原則)。若同時將保安主管分派至用戶A,則操作時,需要選擇操作角色。
當一個用戶配置了多個角色身份時,權限取并集。
4. 統一模型:RBAC3
統一模型是包括了繼承和分離兩種情況的更為復雜的模型,即既要定義角色間的的繼承關系,也要維護好角色間的責任分離關系。
在這里就不做過多的贅述(兩張圖供大家參考),因為只要維護好了角色間的約束關系,其他規則類的處理方式同RABC1和RABC2。
角色管理
權限配置
五、總結
1. 角色數據權限
- 不同的角色身份查看的角色數據時不相同的,比如物業分公司中深圳區域分公司的管理人員可能就無法管理長沙區域分公司,在給角色分配數據權限時就可以將長沙區域分公司去除。
- 除數據權限外,我們還會遇到字段權限,比如:分公司C和分公司D都能看到上海區域分公司的客戶情況,但是C看不到客戶聯系方式,D則能看到聯系方式。如果有需要對字段權限進行控制,則可以在設置角色的數據權限或者功能權限時,進行控制。
- 題前有提到針對saas模式,可能存在一個角色在管理A跟B應用時可操作的數據權限時不一樣的,可以在數據權限中增加一個高級設置權限,為不同的角色針對不用的應用進行分配數據操作。
2. 用戶操作體驗
平臺類或者TO B內部產品,雖然不像C端為了留住用戶追求極致用戶體驗,但是也需要確保在交互以及文字理解上面不會讓用戶產生疑惑情緒,培訓成本也是開發成本的一環,尤其針對權限一塊可能涉及業務功能復雜,如果在文字描述以及操作上在加大操作難度,可能無法估量的后果。
3. 默認賬號以及默認權限的設置
對于ToB類或者平臺類的產品,正常來講都會有一個默認的超級管理員的角色以及角色對應的賬號,否則系統內第一個角色誰來添加?
默認權限的設置則根據需要進行設置,如果是不必要進行控制的權限,當然是可以設置為默認權限的。
綜上所述,根據以上的設計模式以及解決方案,已經能實現大部分企業90%的問題了,實際上很多企業并不需要做到這么小粒度的權限控制。
本文由 @Vicky 原創發布于人人都是產品經理。未經許可,禁止轉載
題圖來自Unsplash,基于CC0協議
RBAC0 中 用戶和角色怎么會是多對一的關系呢? 肯定是多對多的關系啊
Erp訂單管理
寫的很好~權限管理顆粒度分到這個程度確實滿足了挺多。最近也在做類似平臺的權限設計,我是把角色和用戶都掛到組織下,數據權限做簡單化的同組織層級自動關聯處理。請問這個平臺有原型或體驗鏈接嗎?
最近在做這一塊的設計,lz寫的很實用,有幫到
數據權限部分:場景:運營部門的內容創建者只能看到自己創建的內容,如何實現?
最簡單的方法,頁面隔開
只顯示創建者為自己的內容?程序寫死?
是的,增加一個【我創建的】tab
寫的非常好,關鍵還是美女寫的。補充:1、如果角色有繼承關系,高級角色擁有低級角色的權限,則越往高級別,權限越多,功能也越多,實際情況是越往高級,越只看統計、審批之類的功能,具體業務不會參與。2、角色的繼承關系,可以通過組織架構替代,每個賬號都歸屬到對應的組織架構,這是只要對該賬號歸屬的組織架構配置權限即可。3、還可以讓角色也歸屬組織架構,對應的該組織架構下的賬號只能配置對應的角色。
輝哥?
額,區區在下是個姑娘嘿 ??
如果深圳分部的人需要去管理長沙分部的人,就是說這種權限需要可配置的,那應該如何設計呢?
如果角色功能不存在互斥,給需要的人員分配兩個角色就好啦,角色下再去分配數據以及功能權限。
好文章
筆者能否留一下郵箱地址,我有很困惑的權限設計問題想請教你一下,感恩??
可以關注我的公眾號“百里狗”,留言溝通哦
檢查任務和檢查項設置,我目前也在做這一塊的方面,沒琢磨透,可否交流下 ??
既然是B端,用模塊的代替應用是否更好?
權限分級:系統權限,模塊權限,功能權限,數據權限
除系統權限外,按照架構分級:總部、分部、部門
后面的……太多了,寫不完了
saas類產品是存在一個平臺服務多個企業,后期還可擴展接入企業已有其他應用,且saas下的每個應用都是可單獨出來在有基礎數據的支撐下獨立運行的,模塊之間會存在耦合性,應用就是為了減少耦合使之可以獨立運行。組織架構分級也是屬于數據權限的一部分。
分級分權管理啊
應用這個說法用在移動端,WEb端用模塊,比如你的saas系統里面提供了一個簡單的日程管理,你叫日程管理應用不太合適吧?
模塊化沒任何毛病啊….這樣可以解決不用企業的個性化需求,權限分級分權,滿足saas提供者和企業用戶的權限使用需求
模塊跟應用的界限在我看來是很模糊的,千人有千面,我定義模塊是無法達到完成閉環的,但是應用可以,但是你說的類似日程管理這種基礎服務類又確實用模塊來命名比價合適,現在很多saas模式的平臺比如釘釘在后臺管理里面也是添加應用而不是添加模塊這種說法。
這樣說吧,既然是一個平臺,那么基于平臺基本功能點進行的功能設計就是歸屬平臺的功能模塊
模塊和應用概念之間的差距,模塊歸屬于平臺,應用植入平臺
也不能說他們有很明確的界限,主要看一個系統的主次之分吧,重PC還是重移動,重PC,模塊化(功能集合),功能在移動端的展現形式則為應用。
重移動端,則全部稱為應用也沒有任何問題
釘釘的初衷就是做移動辦公,移動端用應用這個定義沒有任何毛病,釘釘的后端是為了和前臺匹配對應,所有用了應用
如果你的saas是移動端為主,PC端為輔助, 沒任何問題,如果以PC端為主,移動端為輔,叫應用就有點怪怪的了!
其實換個角度也沒有必要模塊和應用限定的那么死板。我也不認為你說移動端叫應用就一定沒毛病,假設移動端提供的功能就是pc版同樣的,我叫它模塊也沒啥問題。不管是pc為主還是移動為主這個概念在我的理解中都不存在問題。如果是在saas的平臺中應用的存在從場景上更多是應用市場,第三方可擴展的內容。模塊可以認為是saas平臺本身提供什么功能模塊。這些可能是基礎的功能也可以叫應用。
沒毛病
名字隨便叫,只要大家都接受,隨便叫模塊、應用、功能,都OK!
移動端不可能提供和PC端同樣的內容,原因是他們的功能架構不可能一樣
移動端可以采用頁面+功能入口、菜單的方式來呈現,PC端基本都是菜單,不可能說同一個系統里面做應用放到同一個頁面中吧?當然可以嘗試這么干….. ??
個人認為,無論是功能權限,頁面權限,還是數據權限,歸根結底都是 api 得訪問權限,即節點權限
感謝分享這篇文章。就我目前所知的權限體系中,以及在做的產品權限是RBAC0這一類型的。其他的幾種我還真不知道,感謝。
??
按開發成本來算,感覺角色權限變成操作權限,就沒有必要弄成角色層級關系了,按用戶分配業務權限,不同角色搭配不同的業務權限;
如:財務總監:注冊基本權限+稽查權限(對訂單管理可進行增+刪+改+查)
會計:注冊基本權限+審核權限(對訂單管理可進行查)
角色層級可用于繼承或者約束關系,RBAC0就是不存在角色層級關系,可以根據業務自身需要進行調整
不做層級,你會很糾結的,你的權限會特別多!
比如人事的:部門HR,分部HR,總部HR,對于人事的操作權限局限于部門、分部、總部
財務也分總部財務和分部財務
不做權限分級,做起來會特別麻煩!
可以具體介紹一下權限分級分權是怎么實現的嗎?我目前需要要做集團型的多層級組織架構的權限管理模塊
留個聯系方式?
這里幾句話也講不完