zoukankan      html  css  js  c++  java
  • 关于casbin

    关于casbin

    1.支持 ACL,RBAC,ABAC 等常用的访问控制模型

    Casbin 的核心是一套基于 PERM metamodel (Policy, Effect, Request, Matchers) 的 DSL。

    Policy: 定义权限的规则

    Effect: 定义组合多个Policy 后是允许还是拒绝(allow/deny)

    Request: 访问的请求,可以理解为谁想访问什么资源

    Matcher:判断Request 是否满足Policy ,返回true或false

    文档地址:https://casbin.org/docs/zh-CN/overview

    2.Echo支持casbin配置,cabin支持gorm的适配

    import (
      "github.com/casbin/casbin"
      casbin_mw "github.com/labstack/echo-contrib/casbin"
    )
    
    e := echo.New()
    enforcer, err := casbin.NewEnforcer("casbin_auth_model.conf", "casbin_auth_policy.csv")
    e.Use(casbin_mw.Middleware(enforcer))
    

    2.1支持自定义配置

    e := echo.New()
    ce := casbin.NewEnforcer("casbin_auth_model.conf", "")
    ce.AddRoleForUser("alice", "admin")
    ce.AddPolicy(...)
    e.Use(casbin_mw.MiddlewareWithConfig(casbin_mw.Config{
      Enforcer: ce,
    }))
    

    3.casbin配置简单,实现更简单

    Request 请求
    定义了请求参数。一个基本的请求是一个元组对象,至少包含subject(访问实体), object(访问的资源)和 action(访问方法)。

    r={sub, obj,act}

    它其实就是定义了传入访问控制匹配函数的参数名和顺序。

    Policy 策略
    定义访问策略的模型。其实就是定义Policy规则文档中各字段的名称和顺序。

    p={sub, obj, act} 或 p={sub, obj, act, eft}

    注意:如果不定义 eft(策略结果),那么将不会去读策略文件中的结果字段,并将匹配的策略结果都默认为allow。

    Matchers 匹配规则
    Request和Policy的匹配规则。
    例如: m = r.sub == p.sub && r.act == p.act && r.obj == p.obj
    这条简单又常见的匹配规则的意思就是,请求的参数(实体、资源和方法)都相等即在策略中能找到,那么返回策略结果(p.eft)。策略结果会保存在p.eft中。

    Effect
    用于将给定请求与最终结果匹配的策略组合/减少的策略的模型。可以理解为,对Matchers匹配后的结果再进行一次逻辑组合判断的模型。
    例如:e = some(where(p.eft == allow))
    这句的意思是指,如果匹配策略结果p.eft 存在(some) allow的结果,那么最终结果就为 真
    再看个例子:
    e = some(where (p.eft == allow)) && !some(where (p.eft == deny))
    这个例子组合的逻辑含义是:如果有匹配出结果为alllow的策略并且没有匹配出结果为deny的策略则结果为真,换句话说,就是匹配的策略都为allow时才为真,如果有任何deny,都为假 (更简单的说当allow和deny同时存在时,deny优先)

    # Request definition
    [request_definition]
    r = sub, obj, act
    
    # Policy definition
    [policy_definition]
    p = sub, obj, act, eft # 这里我们定义了eft,不使用默认值
    
    # Policy effect
    [policy_effect]
    e = some(where (p.eft == allow)) && !some(where (p.eft == deny)) # 这里使用了deny优先
    
    # Matchers
    [matchers]
    m = r.sub == p.sub && r.obj == p.obj && r.act == p.act #最简单的匹配规则。请求的参数与策略参数一致时获得策略结果
    
    

    4.casbin+gorm+gin使用示例

    https://www.cnblogs.com/Mail-maomao/p/11951482.html

    相关链接

    https://echo.labstack.com/middleware/casbin-auth
    https://casbin.org/docs/en/syntax-for-models
    https://casbin.org/docs/zh-CN/adapters
    https://www.jianshu.com/p/aa1ce4932fda

  • 相关阅读:
    YII框架实现排序
    YII2 实现登录时候修改最新登录时间
    YII框架下实现密码修改
    json在PHP中应用技巧
    更换Python pip库镜像地址
    Python3创建RIDE桌面快捷方式的另一种方法
    谈谈测试人员的基本素养
    《微软的软件测试之道》阅读笔记
    PPT如何一页多张打印且铺满整个页面
    Linux 在线模拟器
  • 原文地址:https://www.cnblogs.com/tomtellyou/p/13489145.html
Copyright © 2011-2022 走看看