ToB領(lǐng)域的權(quán)限體系設(shè)計簡介
(本文適合小白入門)
一個最簡單表達(dá)了權(quán)限模型的實例
小明和小李,分別用自己的帳號和密碼登錄了同一個平臺頁面。小明登陸上去后,可以看到小說和視頻頁面。小李登陸上去之后,只能看到小說頁面。Mmmm.....他倆有不同的權(quán)限
后臺是什么樣的模型來實現(xiàn)的呢。對于ToB領(lǐng)域的權(quán)限控制,產(chǎn)品經(jīng)理經(jīng)常用到的是RBAC模型
什么是RBAC
RBCA是英文role-based access control的縮寫,即基于角色的權(quán)限管理系統(tǒng),用來實現(xiàn)對用戶授權(quán),訪問系統(tǒng)的特定部分,實現(xiàn)不同粒度的權(quán)限控制。可以理解為一種非功能性的需求,而是一種安全機制。據(jù)說一般一個企業(yè)超過500名員工,都會需要用到權(quán)限控制。至于“安全”這個主題,在對企業(yè)打分的時候,不一定會成為一個加分項,但一定可以成為一個扣分項。
RBAC的核心是角色(role)。所有使用者的能夠操作的內(nèi)容,都是通過角色來進(jìn)行賦予和禁止,而不是直接通過對使用者本身來繼續(xù)賦予和禁止。如軟件行業(yè)的行話,當(dāng)一個系統(tǒng)太復(fù)雜了,那么就為他加一個層吧。同理,這樣一個role層加入是為了簡化復(fù)雜度。具體原因可以看RBAC和ACL的區(qū)別
下面來看一下,如果用戶要執(zhí)行一項操作,需要滿足的RBAC的繞口令似的3原則
- 角色分配:一個用戶必須被分配一個角色
- 角色授權(quán):當(dāng)前角色必須被授權(quán)給當(dāng)前用戶
- 權(quán)限授權(quán):權(quán)限必須被授予給當(dāng)前用戶的角色,當(dāng)前用戶才能執(zhí)行這項權(quán)限
RBAC和ACL的區(qū)別
傳統(tǒng)的ACL是屬于更底層更基礎(chǔ)的數(shù)據(jù)對象的權(quán)限控制,比如一個文件可以讀寫的權(quán)限控制。RBAC是帶有業(yè)務(wù)含義的權(quán)限控制。比如可以表達(dá)出銀行業(yè)里,保險箱需要的開啟需要銀行經(jīng)理和儲戶的鑰匙同時存在。又比如可以表達(dá)出業(yè)務(wù)流程中不能出現(xiàn)“自己審理自己”的這種荒唐現(xiàn)象。
權(quán)限體系與帳號體系的關(guān)系
賬號體系包含的內(nèi)容是用戶帳號的注冊/登錄/密碼修改/密碼找回功能。其中用戶帳號登錄,就會需要權(quán)限系統(tǒng)提供的功能來進(jìn)行協(xié)助校驗。
校驗內(nèi)容包含:
- 這個用戶是不是被禁止,是否可以登錄系統(tǒng)。
- 這個用戶登錄后,能夠看到哪些頁面
- 在他能夠訪問到的頁面上,能夠執(zhí)行哪些操作
權(quán)限體系與組織架構(gòu)的關(guān)系
組織架構(gòu)是企業(yè)的行政組織架構(gòu)。企業(yè)所使用的系統(tǒng),都是其組織結(jié)構(gòu)的反應(yīng)。所以任何一個ToB的系統(tǒng),如果要獲得客戶的認(rèn)可,必須符合客戶的組織結(jié)構(gòu)。
大型企業(yè)的組織架構(gòu)會相當(dāng)復(fù)雜,比如國家電網(wǎng)這種重量級選手,有職能部門,地區(qū)分部,一級省公司,直屬單位,再往下細(xì)分那就更多更復(fù)雜了。如果小型公司,可能就只有公司總體和部門兩個級別,比較簡單??梢韵胍?,對于越復(fù)雜的組織結(jié)構(gòu),所要求的權(quán)限控制的精細(xì)度,權(quán)限限制會更加復(fù)雜
權(quán)限體系與組織架構(gòu)能夠一眼所見的,最直接的關(guān)系,就是數(shù)據(jù)。組織與組織之間的數(shù)據(jù),應(yīng)該是隔離的,組織A的人員,不能夠去訪問和操作其他組織的數(shù)據(jù)。這些需要通過權(quán)限體系來實現(xiàn)。
簡單權(quán)限系統(tǒng)的設(shè)計
如前所述,首先需要設(shè)計的是角色。
角色分離
一般角色可以按照兩種維度進(jìn)行分離,管理的維度和業(yè)務(wù)的維度。
- 管理角色:一般是企業(yè)的運維人員,可以登錄系統(tǒng),進(jìn)行維護(hù)和授權(quán)操作。一般通過自定義的方式,可以支持頁面上新建。一般一個賬號可以同時有多個自定義角色
- 業(yè)務(wù)角色:按照職責(zé)進(jìn)行確認(rèn),比如財務(wù),保潔員,總經(jīng)理等。一般通過內(nèi)置角色的方式來實現(xiàn),不支持頁面上新建。一般一個帳號可以有一個內(nèi)置角色
上面說的是一般,一般,一般。當(dāng)然實際情況中總會有新的不同情況
管理角色會發(fā)生變化,但是業(yè)務(wù)角色由于和企業(yè)的組織架構(gòu),職級,職能相綁定,一般創(chuàng)建好之后是不會發(fā)生變化的。
用戶分配角色
參考RBAC三原則,當(dāng)系統(tǒng)中新建一個用戶時,必須為這個用戶分配一個對應(yīng)的角色
角色授權(quán)
不管是內(nèi)置角色還是自定義角色,當(dāng)新建一個角色時,需要為這個角色進(jìn)行授權(quán)。permission是一個操作,定義了能夠讀取哪些資源,可以認(rèn)為授權(quán)的對象是由角色+資源(resource)+ 操作組成。資源是指菜單,功能,操作是通常含義的CRUD操作,用user story來描述是,這個角色能夠?qū)δ男┵Y源做哪些具體的操作。角色與資源之間是多對多的關(guān)系。
一個授權(quán)的例子:角色是倉庫保管員,可以訪問倉庫頁面,并對倉庫里的貨物進(jìn)行出入和入庫操作。系統(tǒng)管理員為小明創(chuàng)建了一個xiaoming的帳號,并給xiaoming綁定了倉庫保管員的角色。結(jié)果就是:小明登錄系統(tǒng)后,能夠?qū)}庫的貨物進(jìn)行操作了
復(fù)雜權(quán)限系統(tǒng)的設(shè)計
復(fù)雜權(quán)限系統(tǒng)設(shè)計中,會引入以下概念。后續(xù)再介紹
- 用戶組
- 業(yè)務(wù)流引擎
(to be continue)