欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

casbin的分析

程序员文章站 2022-04-09 18:34:15
casbin的分析 问题 一般的项目中,都会有权限认证模块,用来控制不同的角色,可以访问的功能。比较出名的权限控制模型有ACL和RABC。如果每个项目中,都重新实现权限控制模块,这样操作会比较繁琐,希望有一个统一的简单模块来控制权限,而casbin这个开源项目,可以支持acl,rabc和abac这几 ......

casbin的分析

问题

一般的项目中,都会有权限认证模块,用来控制不同的角色,可以访问的功能。比较出名的权限控制模型有acl和rabc。如果每个项目中,都重新实现权限控制模块,这样操作会比较繁琐,希望有一个统一的简单模块来控制权限,而casbin这个开源项目,可以支持acl,rabc和abac这几个模式的权限控制,能够通过简单的配置就集成到项目中使用。

原理分析

casbin通过配置文件来对权限模型进行配置,将一个权限的模型划分为:request,policy,policy_effect和matchers,典型的配置格式(rabc):

# 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,分别表示,用户(或者分组),资源对象,权限

  • request_definition:表示请求的格式
  • policy_definition:表示权限的格式
  • policy_effect:表示匹配之后的动作
  • matchers:表示匹配的规则,通过运算得出bool值

有了权限定义的文件之后,还需要有一个用户或者角色分组的存储的信息:

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

这里的格式,表示:

  • alice对资源data1可以进行read
  • bob对资源data2可以进行write

当alice去读取data1的时候,就会触发matchers的规则,通过存储的角色信息进行运算,按照上面的例子,就可以通过审核。

通过对权限配置和用户角色存储的结构进行组合,然后按照matchers的规则,就可以得出用户是否有权限对资源进行访问了。

支持的比较函数

对于匹配规则,可以支持简单的运算,还有就是支持几个内置的函数,方便进行匹配运算:

fm.addfunction("keymatch", util.keymatchfunc)
fm.addfunction("keymatch2", util.keymatch2func)
fm.addfunction("regexmatch", util.regexmatchfunc)
fm.addfunction("ipmatch", util.ipmatchfunc)

函数的含义:

  • keymatch:能够支持使用*匹配进行匹配匹配
  • keymatch2:能够支持*号匹配和/:resource的模式
  • regexmatch:能够支持正则匹配
  • ipmatch:能够对ip格式进行匹配,"192.168.2.123" matches "192.168.2.0/24"

支持对主流的框架支持

需要支持的框架,包括web框架和存储框架,使用adapter进行支持,现在可以支持的框架,包括:

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

更多的查看官网

多语言支持

现在有多种语言版本的支持:

  • golang
  • java
  • php
  • ....

更多的查看官网

总结

casbin使用起来比较简单容易,功能比较强大,能够满足需求,而且代码比较清晰易懂,作者也很有趣,值得使用。

参考资料