zoukankan      html  css  js  c++  java
  • casbin的分析

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

    参考资料

  • 相关阅读:
    Delphi ADOQuery连接数据库的查询、插入、删除、修改
    Delphi开发的一些技巧
    获取的数据载入listview控件中
    第一个Directx程序
    edit编辑框只能输入数字和一个小数点
    (原创) 一个通用的C++ 消息总线框架
    springboot 集成logback 及配置,日志格式,重复打印配置
    算法09未排序数组中累加和为给定值的最长子数组长度
    算法12猫狗队列
    算法06由两个栈组成的队列
  • 原文地址:https://www.cnblogs.com/xiaohunshi/p/10372881.html
Copyright © 2011-2022 走看看