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
- 匹配 XML 檔案正規表示式XML
- Nginx匹配規則練習Nginx
- modsecurity:規則例子:匹配url
- go配置檔案讀取Go
- modsecurity黑白名單以及規則檢測模式配置模式
- nginx location匹配及rewrite規則Nginx
- go 讀取.ini配置檔案Go
- drools執行String規則或執行某個規則檔案
- 匹配linux檔案路徑的正規表示式Linux
- nginx的location 規則匹配練習Nginx
- php正則匹配所有違規字元PHP字元
- web前端對檔案的引用規則Web前端
- Window資料夾,檔案命名規則
- 匹配window下檔案路徑的正規表示式
- C++ include標頭檔案引入規則C++
- Drools與動態載入規則檔案
- Git中.gitignore檔案不起作用的解決以及Git中的忽略規則介紹Git
- Android中的Intent Filter匹配規則介紹AndroidIntentFilter
- 你必須弄懂的Intent Filter匹配規則IntentFilter
- Go 專案配置檔案的定義和讀取Go
- 靜態路由規則配置路由
- ESLint: 規則配置覆蓋EsLint
- servlet的url-pattern匹配規則詳細描述Servlet
- appcrawler 配置檔案中正規表示式不生效APP
- Linkerd Service Mesh 服務配置檔案規範
- 3.Go語言中常量,變數, 及其命名規則以及程式碼風格Go變數
- 精進 Spring Boot 03:Spring Boot 的配置檔案和配置管理,以及用三種方式讀取配置檔案Spring Boot
- nginx配置web訪問以及檢視目錄檔案NginxWeb
- 在Docker中,Docker配置檔案在哪裡以及如何修改?Docker
- Apache之Rewrite和RewriteRule規則梳理以及http強轉https的配置總結ApacheHTTP
- javascript變數的宣告以及命名規則JavaScript變數
- Linux 伺服器下如何建立檔案防篡改規則Linux伺服器
- Linux伺服器下如何建立檔案防篡改規則Linux伺服器
- 理解 Nginx 在處理請求時的匹配規則Nginx
- Activity的啟動模式及IntentFilter匹配規則總結模式IntentFilter