網站首頁 編程語言 正文
導語
學習一下golang權限控制,保留一下demo代碼作為參考
Casbin是什么
Casbin是一個強大的、高效的開源訪問控制框架,其權限管理機制支持多種訪問控制模型,Casbin只負責訪問控制。
其功能有:
- 支持自定義請求的格式,默認的請求格式為
{subject, object, action}
。 - 具有訪問控制模型model和策略policy兩個核心概念。
- 支持RBAC中的多層角色繼承,不止主體可以有角色,資源也可以具有角色。
- 支持內置的超級用戶 例如:
root
或administrator
。超級用戶可以執行任何操作而無需顯式的權限聲明。 - 支持多種內置的操作符,如?
keyMatch
,方便對路徑式的資源進行管理,如?/foo/bar
?可以映射到?/foo*
實現思路
package main import ( "fmt" "github.com/casbin/casbin/v2" gormadapter "github.com/casbin/gorm-adapter/v3" _ "github.com/go-sql-driver/mysql" ) func main() { //e, err := casbin.NewEnforcer("model.conf", "policy.csv") // 本地policy a, _ := gormadapter.NewAdapter("mysql", "root:pass@tcp(localhost:3306)/casbin?charset=utf8mb4&parseTime=True&loc=Local", true) // 數據庫policy e, _ := casbin.NewEnforcer("./model.conf", a) // model依舊放本地 沒有必要放數據庫 把a變成了適配器存到了數據庫 // Load the policy from DB. e.LoadPolicy() // Check the permission. e.Enforce("alice", "data1", "read") // Modify the policy. // e.AddPolicy(...) // e.RemovePolicy(...) // Save the policy back to DB. e.SavePolicy() sub := "alice" // 想要訪問資源的用戶 obj := "data1" // 將要被訪問的資源 act := "read" // 用戶對資源實施的操作 //added, err := e.AddPolicy("alice", "data1", "read") // added返回是bool類型 //fmt.Println(added) //fmt.Println(err) //if err != nil { // // 處理錯誤 // fmt.Printf("%s", err) //} ok, err := e.Enforce(sub, obj, act) if err != nil { // 處理錯誤 fmt.Printf("%s", err) } if ok == true { // 允許 alice 讀取 data1 fmt.Println("通過") } else { // 拒絕請求,拋出異常 fmt.Println("未通過") } // 您可以使用 BatchEnforce() 去批量處理一些請求。 // 這個方法返回一個布爾類型的切片,切片的下標對應二位數組的行標 // 例如 results[0] 是 {"alice", "data1", "read"} 的結果 //results, err := e.BatchEnforce([][]interface{}{{"alice", "data1", "read"}, {"bob", "data2", "write"}, {"jack", "data3", "read"}}) }
package main import ( "fmt" "github.com/casbin/casbin/v2" gormadapter "github.com/casbin/gorm-adapter/v3" _ "github.com/go-sql-driver/mysql" ) func main() { //e, err := casbin.NewEnforcer("model.conf", "policy.csv") // 本地policy a, _ := gormadapter.NewAdapter("mysql", "root:pass@tcp(localhost:3306)/casbin?charset=utf8mb4&parseTime=True&loc=Local", true) // 數據庫policy e, _ := casbin.NewEnforcer("./model.conf", a) // model依舊放本地 沒有必要放數據庫 把a變成了適配器存到了數據庫 // Load the policy from DB. e.LoadPolicy() // Check the permission. e.Enforce("alice", "data1", "read") // Modify the policy. // e.AddPolicy(...) // e.RemovePolicy(...) // Save the policy back to DB. e.SavePolicy() sub := "alice" // 想要訪問資源的用戶 obj := "data1" // 將要被訪問的資源 act := "read" // 用戶對資源實施的操作 added, err := e.AddPolicy("alice", "data1", "read") // added返回是bool類型 fmt.Println(added) if err != nil { // 處理錯誤 fmt.Printf("%s", err) } ok, err := e.Enforce(sub, obj, act) if err != nil { // 處理錯誤 fmt.Printf("%s", err) } if ok == true { // 允許 alice 讀取 data1 fmt.Println("通過") } else { // 拒絕請求,拋出異常 fmt.Println("未通過") } // 您可以使用 BatchEnforce() 去批量處理一些請求。 // 這個方法返回一個布爾類型的切片,切片的下標對應二位數組的行標 // 例如 results[0] 是 {"alice", "data1", "read"} 的結果 //results, err := e.BatchEnforce([][]interface{}{{"alice", "data1", "read"}, {"bob", "data2", "write"}, {"jack", "data3", "read"}}) }
原文鏈接:https://blog.csdn.net/xujiamin0022016/article/details/128071277
相關推薦
- 2022-08-19 Python運行時修改業務SQL代碼_python
- 2022-09-26 android Recycleview的側滑點擊刪除功能實現
- 2022-10-07 C語言直接選擇排序算法詳解_C 語言
- 2022-08-11 C#中的composite模式示例詳解_C#教程
- 2022-10-17 Nginx中root與alias區別講解_nginx
- 2023-05-29 docker部署xxl-job-admin出現數據庫拒絕問題及解決方法_docker
- 2022-05-07 Python?ini配置文件示例詳解_python
- 2022-12-09 Python網絡編程之Python編寫TCP協議程序的步驟_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支