beego利用casbin進行許可權管理——第一節 起步、測試
beego利用casbin進行許可權管理——第二節 策略存儲
beego利用casbin進行許可權管理——第三節 策略查詢
beego利用casbin進行許可權管理——第四節 策略更新
近4個月沒有更新這個系列。這個系列都是我粗淺的理解,其中我感覺有些的思路並非最優,並不合主流概念,因為我沒去學習rbac之類的概念,僅供參考。特別是對於許可權設計的處理方式,casbin是盡量用它自己的查詢方式,因為那是直接查(增、刪、改)內存(map),而不應該去查(增、刪、改)資料庫,這點必須避免,這個系列文章中很多犯這樣的錯誤,閱讀時,應該根據自己的場景,去迴避犯這種錯誤。
這次後半部分藉助我剛寫完的onlyoffice的許可權設計,這個許可權設計總體感覺蠻新穎的,是仿照onlyoffice community寫的,對文檔的賦權,無論是用戶還是角色,每個對應4種許可權,一氣呵成,我使用bootstrap table的x-editable以及select2等進行下拉選擇,實時批量設置和單獨切換許可權,非常自由隨性。
策略更新包含用戶角色更新,用戶或角色的許可權更新。casbin的rbac_api.go和management_api.go中的方法,似乎分成幾個「層次」:比如addrole和addpermission,這種專用的;AddNamedPolicy類似這種通用的。
再比如GetPermissionsForUser,它不同於enforce(),後者能夠實現:user屬於role,user具備訪問data1的許可權,role具備訪問data2的許可權,此時用enforce(user,data2),結果是true,但是用GetPermissionsForUser(user),它取不到role的data2。 只能用 先取出user的所有角色,再循環,取出每個角色具備的許可權。
[plain] view plain copy
- roles := e.GetRolesForUser(useridstring) //取出用戶的所有角色
- for _, w := range roles {
- roleRes = e.GetPermissionsForUser(w) //取出角色的所有許可權
- for _, k := range roleRes {
言歸正傳,策略修改總的思路應該是這樣:
1.要更新一個用戶的角色,先把這個用戶的角色全部刪掉,然後重新添加這個用戶的角色。
2.更新用戶(或角色)的許可權,先把這個用戶對於某個文件的許可權全部刪掉,再重新添加,道理一樣。
首先是用戶和角色的修改:下圖,點擊用戶,下面顯示這個用戶具有的角色,並勾選上。