casbin的分析

casbin的分析

問題

通常的項目中,都會有權限認證模塊,用來控制不一樣的角色,能夠訪問的功能。比較出名的權限控制模型有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

  • request_definition:表示請求的格式
  • policy_definition:表示權限的格式
  • policy_effect:表示匹配以後的動做
  • matchers:表示匹配的規則,經過運算得出bool值

有了權限定義的文件以後,還須要有一個用戶或者角色分組的存儲的信息:github

p, alice, data1, read
p, bob, data2, write

這裏的格式,表示:golang

  • alice對資源data1能夠進行read
  • bob對資源data2能夠進行write

當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

  • keyMatch:可以支持使用*匹配進行匹配匹配
  • keyMatch2:可以支持*號匹配和/:resource的模式
  • regexMatch:可以支持正則匹配
  • ipMatch:可以對ip格式進行匹配,"192.168.2.123" matches "192.168.2.0/24"

支持對主流的框架支持

須要支持的框架,包括web框架和存儲框架,使用adapter進行支持,如今能夠支持的框架,包括:orm

  • gin
  • gorm
  • file
  • xorm
  • protobuf
  • ....

更多的查看官網

多語言支持

如今有多種語言版本的支持:

  • golang
  • java
  • php
  • ....

更多的查看官網

總結

casbin使用起來比較簡單容易,功能比較強大,可以知足需求,並且代碼比較清晰易懂,做者也頗有趣,值得使用。

參考資料

相關文章
相關標籤/搜索