通常的项目中,都会有权限认证模块,用来控制不一样的角色,能够访问的功能。比较出名的权限控制模型有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使用起来比较简单容易,功能比较强大,可以知足需求,并且代码比较清晰易懂,做者也颇有趣,值得使用。