go Casbin配置檔案,以及匹配規則
今天學了一下casbin,對caspin的怎麼匹配的有了心得,我自己的理解,相關資料也沒有查詢,只是為了把我的想法在此記錄下來
引用一下https://juejin.im/post/6844904191257739277#heading-1該文件的例子,我也是根據這個學的。
我們首先編寫模型檔案:
model.conf
[request_definition] //接收器,程式碼裡呼叫e.Enforce(sub, obj, act)的時候,會把值賦給這幾個引數
r = sub, obj, act
[policy_definition]//匹配器,用cvs檔案賦值
p = sub, obj, act
[matchers]//匹配方法
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
[policy_effect]//匹配的結果通過p.eft獲取,some(where (p.eft == allow))表示只要有一條策略允許即可。
e = some(where (p.eft == allow))
然後我們策略檔案(即誰能對什麼資源進行什麼操作):
policy.csv
p, dajun, data1, read
p, lizi, data2, write
上面policy.csv檔案的兩行內容表示dajun對資料data1有read許可權,lizi對資料data2有write許可權。
然後程式碼
package main
import (
"fmt"
"log"
"github.com/casbin/casbin/v2"
)
func check(e *casbin.Enforcer, sub, obj, act string) {
ok, _ := e.Enforce(sub, obj, act)
if ok {
fmt.Printf("%s CAN %s %s\n", sub, act, obj)
} else {
fmt.Printf("%s CANNOT %s %s\n", sub, act, obj)
}
}
func main() {
e, err := casbin.NewEnforcer("./model.conf", "./policy.csv")
if err != nil {
log.Fatalf("NewEnforecer failed:%v\n", err)
}
check(e, "dajun", "data1", "read")
check(e, "lizi", "data2", "write")
check(e, "dajun", "data1", "write")
check(e, "dajun", "data2", "read")
}
程式碼其實不復雜。首先建立一個casbin.Enforcer物件,載入模型檔案model.conf和策略檔案policy.csv,呼叫其Enforce方法來檢查許可權。
執行程式的結果:
dajun CAN read data1
lizi CAN write data2
dajun CANNOT write data1
dajun CANNOT read data2
這裡看一下是如何判斷的,以第一條為例
呼叫check(e, "dajun", "data1", "read"),配置檔案寫著r = sub, obj, act,此時,r = dajun,data1,read,把引數賦值給r
然後根據匹配規則做判斷 m = r.sub == p.sub && r.obj == p.obj && r.act == p.act是否為true,因為policy.csv檔案配置了2條策略,所以會依次做判斷。比如第一條策略是 p, dajun, data1, read。那麼判斷就是r.dajun == p.dajun&&r.data1==p.data1&&r.read == p.read,結果就是true
相關文章
- 正則匹配規則2
- nginx location匹配規則Nginx
- Sendmail relay規則及配置檔案用法彙總 sendmail配置 (轉)AI
- 匹配 XML 檔案正規表示式XML
- Nginx匹配規則練習Nginx
- spring resource以及ant路徑匹配規則 原始碼學習Spring原始碼
- nginx location匹配及rewrite規則Nginx
- modsecurity黑白名單以及規則檢測模式配置模式
- go配置檔案讀取Go
- oracle10g的正則規則匹配Oracle
- php正則匹配所有違規字元PHP字元
- nginx的location 規則匹配練習Nginx
- web前端對檔案的引用規則Web前端
- 校驗檔案的搜尋規則
- Window資料夾,檔案命名規則
- Xamarin.iOS提供沒有匹配的配置檔案iOS
- drools執行String規則或執行某個規則檔案
- 匹配linux檔案路徑的正規表示式Linux
- 匹配window下檔案路徑的正規表示式
- 【java規則引擎】模擬rete演算法的網路節點以及匹配過程Java演算法
- 你必須弄懂的Intent Filter匹配規則IntentFilter
- linux /tmp 目錄檔案清理規則Linux
- C++ include標頭檔案引入規則C++
- Go語言中使用正則提取匹配的字串Go字串
- Android中的Intent Filter匹配規則介紹AndroidIntentFilter
- Go 專案配置檔案的定義和讀取Go
- Git中.gitignore檔案不起作用的解決以及Git中的忽略規則介紹Git
- 3.Go語言中常量,變數, 及其命名規則以及程式碼風格Go變數
- 理解 Nginx 在處理請求時的匹配規則Nginx
- Activity的啟動模式及IntentFilter匹配規則總結模式IntentFilter
- javascript變數的宣告以及命名規則JavaScript變數
- Nginx的location配置規則梳理Nginx
- Go 應用中 package main 的規則GoPackageAI
- 如何用Go快速實現規則引擎Go
- Nginx接收的host值會影響alias的規則匹配Nginx
- UDEV規則的匹配鍵和RAW的一點說明dev
- Go語言專案編譯之後找不到配置檔案Go編譯
- nginx配置web訪問以及檢視目錄檔案NginxWeb