Casbin 库使用记录
Posted winyh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Casbin 库使用记录相关的知识,希望对你有一定的参考价值。
Casbin 是什么?
官方解释:Casbin是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。
Casbin只负责访问控制。身份认证 authentication(即验证用户的用户名、密码),需要其他专门的身份认证组件负责。例如(jwt-go)
两个核心概念:
访问控制模型model和策略policy。
工作原理:
Casbin把 访问控制模型 被抽象为基于
PERM元模型 (Policy, Effect, Request, Matchers) [策略,效果,请求,匹配器]
的一个文件( model.conf , 这个文件一般是固定的)。 因此,切换或升级项目的授权机制与修改配置一样简单。 您可以通过组合可用的模型来定制您自己的访问控制模型(ACL, RBAC, ABAC)。 例如,您可以在一个model中获得RBAC角色和ABAC属性,并共享一组policy规则。
Casbin中最基本、最简单的model是ACL。ACL中的model CONF为:
# 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
ACL model的示例policy如下:
p, alice, data1, read p, bob, data2, write
如何使用?
创建一个Casbin决策器需要有一个模型文件和策略文件为参数:
import "github.com/casbin/casbin" e := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
在访问发生之前, 在代码中添加强制挂钩:(这一步就是校验访问控制权,然后根据返回值做对象的分之操作)
sub := "alice" // the user that wants to access a resource. obj := "data1" // the resource that is going to be accessed. act := "read" // the operation that the user performs on the resource. if e.Enforce(sub, obj, act) == true // permit alice to read data1 else // deny the request, show an error
参考资料:https://www.cnblogs.com/xiaohunshi/p/10372881.html
https://www.cnblogs.com/wang_yb/archive/2018/11/20/9987397.html
以上是关于Casbin 库使用记录的主要内容,如果未能解决你的问题,请参考以下文章