关于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