casbin輕量級訪問控制框架
casbin 是一個用 Go 語言打造的輕量級開源訪問控制框架,采用了元模型的設(shè)計思想,支持多種經(jīng)典的訪問控制方案,如基于角色的訪問控制 RBAC、基于屬性的訪問控制 ABAC 等。
casbin 的主要特性包括:
-
支持自定義請求的格式,默認(rèn)的請求格式為{subject, object, action};
-
具有訪問控制模型 model 和策略 policy 兩個核心概念;
-
支持 RBAC 中的多層角色繼承,不止主體可以有角色,資源也可以具有角色;
-
支持超級用戶,如 root 或 Administrator,超級用戶可以不受授權(quán)策略的約束訪問任意資源;
-
支持多種內(nèi)置的操作符,如 keyMatch,方便對路徑式的資源進(jìn)行管理,如 /foo/bar 可以映射到 /foo*;
casbin 不做的事情:
-
身份認(rèn)證 authentication(即驗證用戶的用戶名、密碼),casbin 只負(fù)責(zé)訪問控制。應(yīng)該有其他專門的組件負(fù)責(zé)身份認(rèn)證,然后由 casbin 進(jìn)行訪問控制,二者是相互配合的關(guān)系;
-
管理用戶列表或角色列表。casbin 認(rèn)為由項目自身來管理用戶、角色列表更為合適,casbin 假設(shè)所有策略和請求中出現(xiàn)的用戶、角色、資源都是合法有效的。
安裝
go get github.com/hsluoyz/casbin
HelloWorld 例子
初始化一個 enforcer,傳入兩個參數(shù):模型文件路徑和策略文件路徑;
e := &Enforcer{}
e.Init("examples/basic_model.conf", "examples/basic_policy.csv")
在你的代碼需要進(jìn)行訪問控制的位置,加入如下鉤子;
sub := "alice"
obj := "data1"
act := "read"
if e.Enforce(sub, obj, act) == true {
// permit alice to read data1
} else {
// deny the request, show an error
}
采用管理API進(jìn)行權(quán)限的管理,如獲取一個用戶所有的角色;
roles := e.GetRoles("alice")
請參考 _test.go 測試文件獲得更多的使用方法。
評論
圖片
表情
