通常的項目中,都會有權限認證模塊,用來控制不一樣的角色,能夠訪問的功能。比較出名的權限控制模型有ACL和RABC。若是每一個項目中,都從新實現權限控制模塊,這樣操做會比較繁瑣,但願有一個統一的簡單模塊來控制權限,而casbin這個開源項目,能夠支持acl,rabc和abac這幾個模式的權限控制,可以經過簡單的配置就集成到項目中使用。php
casbin經過配置文件來對權限模型進行配置,將一個權限的模型劃分爲:request,policy,policy_effect和matchers,典型的配置格式(RABC):java
# Request definition [request_definition] r = sub, obj, act # Policy definition [policy_definition] p = sub, obj, act # Policy effect [policy_effect] e = some(where (p.eft == allow)) # Matchers [matchers] m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
sub, obj, act,分別表示,用戶(或者分組),資源對象,權限git
有了權限定義的文件以後,還須要有一個用戶或者角色分組的存儲的信息:github
p, alice, data1, read p, bob, data2, write
這裏的格式,表示:golang
當alice去讀取data1的時候,就會觸發matchers的規則,經過存儲的角色信息進行運算,按照上面的例子,就能夠經過審覈。web
經過對權限配置和用戶角色存儲的結構進行組合,而後按照matchers的規則,就能夠得出用戶是否有權限對資源進行訪問了。框架
對於匹配規則,能夠支持簡單的運算,還有就是支持幾個內置的函數,方便進行匹配運算:函數
fm.AddFunction("keyMatch", util.KeyMatchFunc) fm.AddFunction("keyMatch2", util.KeyMatch2Func) fm.AddFunction("regexMatch", util.RegexMatchFunc) fm.AddFunction("ipMatch", util.IPMatchFunc)
函數的含義:code
須要支持的框架,包括web框架和存儲框架,使用adapter進行支持,如今能夠支持的框架,包括:orm
更多的查看官網
如今有多種語言版本的支持:
更多的查看官網
casbin使用起來比較簡單容易,功能比較強大,可以知足需求,並且代碼比較清晰易懂,做者也頗有趣,值得使用。