多租户通用权限设计(基于 casbin)
所謂權限控制, 概念并不復雜, 就是確認某個操作是否能做, 本質上僅僅就是個bool判斷.
權限幾乎是每個系統必不可少的功能, 和具體業務結合之后, 在系統中往往表現的非常復雜和難于控制, 很大部分原因是把權限和具體業務結合的太過緊密, 把業務的復雜度也加入到權限控制中來了.
一直以來, 都有個想法, 想做一套簡單好用的通用權限系統, 和任何業務都沒有關系, 僅僅就是權限本身的功能.
對此, 做過很多嘗試, 由于設計能力有限, 最后都不了了之, 沒能堅持做出來.
直到看到了?casbin, 這個庫正是一直以來想要做的, 功能強大(幾乎涵蓋了所有的權限場景), 使用簡單, 將權限徹底的獨立了出來.
所以, 基于此庫, 做了一套簡單的權限系統API, 以及一個簡單的前端.
1. 對 casbin 的理解
我對?casbin?的理解是這樣的, 我覺得它之所有如此簡潔且功能強大, 是因為它將權限分為了2塊:
- 對權限策略的管理 
- 對權限的判斷 
1.1 權限策略
在我看來,?casbin?的核心策略主要有2種:
組: 對人員的管理, 一條組策略包括?用戶,?角色,?租戶
權限: 權限控制的依據, 一條權限策略包括?用戶/角色,?租戶,?資源,?操作
通過對權限策略的定義, 可以控制系統中任何資源的訪問.
組策略的定義可以簡化權限策略的定義, 否則每個用戶都要定義大量權限策略
1.2 權限判斷
權限判斷看似復雜, 其實就是確認能或不能的問題, 只要策略描述清楚的了權限, 這里的判斷也很簡單.
所以?casbin?的權限判斷很簡單, 一般只用配置文件定義下就可以了.
說白了, 它就是定義依據組策略和權限策略, 在什么情況下是PASS, 什么情況是NG
2. API介紹
我嘗試基于casbin所做的權限系統, 并不是要做個大而全的, 而是針對自己的項目, 做了個基于RBAC的多租戶權限系統.
API主要分3類:
管理: 用于創建組策略和權限策略
預覽: 基于用戶, 或者基于角色, 或者基于租戶來表達權限關系
權限控制: 判斷用戶或者角色是否有權限
后端是基于 golang 來封裝的:?GIT地址(dev分支)
API的相關代碼在:?src/labrador/controllers/tenant_rbac_api
3. 前端介紹
前端是簡單的react+redux應用, 主要使用了?管理和預覽?的API:?GIT地址(dev分支)
用了?G6?這個庫來表達權限之間的關系.
4. 總結
雖然只是嘗試了casbin的一部分功能, 但是依然感受了它的簡潔和強大.
它對權限的獨立做了非常好的定義, 而且以庫的形式提供, 也方便集成到各種業務系統中, 是個非常值得采用的通用權限庫.??.net core?版本的?casbin?,即?Casbin.NET:https://github.com/casbin/casbin.net
原文地址:https://www.cnblogs.com/wang_yb/p/10407683.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?
總結
以上是生活随笔為你收集整理的多租户通用权限设计(基于 casbin)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 从零开始实现ASP.NET Core M
- 下一篇: 容器化单页面应用中RESTful API
