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使用起来比较简单容易,功能比较强大,可以知足需求,并且代码比较清晰易懂,做者也颇有趣,值得使用。

参考资料

相关文章
相关标签/搜索