多租戶通用許可權設計 基於casbin

2022-02-09 03:33:07 字數 1666 閱讀 3714

所謂許可權控制, 概念並不複雜, 就是確認某個操作是否能做, 本質上僅僅就是個bool判斷.

許可權幾乎是每個系統必不可少的功能, 和具體業務結合之後, 在系統中往往表現的非常複雜和難於控制, 很大部分原因是把許可權和具體業務結合的太過緊密, 把業務的複雜度也加入到許可權控制中來了.

一直以來, 都有個想法, 想做一套簡單好用的通用許可權系統, 和任何業務都沒有關係, 僅僅就是許可權本身的功能.

對此, 做過很多嘗試, 由於設計能力有限, 最後都不了了之, 沒能堅持做出來.

直到看到了casbin, 這個庫正是一直以來想要做的, 功能強大(幾乎涵蓋了所有的許可權場景), 使用簡單, 將許可權徹底的獨立了出來.

所以, 基於此庫, 做了一套簡單的許可權系統api, 以及乙個簡單的前端.

我對casbin的理解是這樣的, 我覺得它之所有如此簡潔且功能強大, 是因為它將許可權分為了2塊:

在我看來,casbin的核心策略主要有2種:

組: 對人員的管理, 一條組策略包括使用者,角色,租戶

許可權: 許可權控制的依據, 一條許可權策略包括使用者/角色,租戶,資源,操作

通過對許可權策略的定義, 可以控制系統中任何資源的訪問.

組策略的定義可以簡化許可權策略的定義, 否則每個使用者都要定義大量許可權策略

許可權判斷看似複雜, 其實就是確認能或不能的問題, 只要策略描述清楚的了許可權, 這裡的判斷也很簡單.

所以casbin的許可權判斷很簡單, 一般只用配置檔案定義下就可以了.

說白了, 它就是定義依據組策略許可權策略, 在什麼情況下是pass, 什麼情況是ng

我嘗試基於casbin所做的許可權系統, 並不是要做個大而全的, 而是針對自己的專案, 做了個基於rbac的多租戶許可權系統.

api主要分3類:

管理: 用於建立組策略許可權策略

預覽: 基於使用者, 或者基於角色, 或者基於租戶來表達許可權關係

許可權控制: 判斷使用者或者角色是否有許可權

後端是基於 golang 來封裝的: git位址(dev分支)

api的相關**在:src/labrador/controllers/tenant_rbac_api

前端是簡單的react+redux應用, 主要使用了管理預覽的api: git位址(dev分支)

用了 g6 這個庫來表達許可權之間的關係.

雖然只是嘗試了casbin的一部分功能, 但是依然感受了它的簡潔和強大.

它對許可權的獨立做了非常好的定義, 而且以庫的形式提供, 也方便整合到各種業務系統中, 是個非常值得採用的通用許可權庫.

通用許可權管理設計

最近又碰到了許可權的分配和管理,需要單獨設計一套結構。其實以前有了很多的這方面的設計和博文,在園子裡面的找找看就會找到n頁的結果。這裡也不敢說是新思路吧,權當是自己的總結和留個腳印吧,方便查詢。通用在這裡有兩個概念 1 為了吸引眼球 一看到是通用就要點開看看究竟,當然了,結果無非是幾種,有人罵,有人...

乙個基於RBAC的通用許可權設計清單

乙個基於rbac的通用許可權設計清單 rbac即角色訪問控制 role based access control rbac認為許可權授權實際上是who what how的問題。在rbac模型中,who what how構成了訪問許可權三元組,也就是 who對what which 進行how的操作 w...

Oracle12C多租戶管理使用者 角色 許可權

在oracle12c中,使用者許可權的管理相對傳統的 oracle 單資料庫環境稍有不同。在多租戶環境中有兩種型別的使用者。共同使用者 common user 該使用者存在所有容器 根和所有的 pdb 中。本地使用者 local user 使用者只有在特定的 pdb 中存在。同樣的使用者名稱中可以存...