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

猜你喜欢

转载自www.cnblogs.com/winyh/p/11367927.html