Casbin的使用

和OPA差不多..但感觉使用起来要简单得多

  • casbin是:model,policy,requst

  • opa是:rego,data,input

飞书私有笔记


Golang 最强大的访问控制框架 casbin 全解析

论文:
一种基于元模型的访问控制策略描述语言


以下内容以视频资料:半小时彻底弄懂Casbin基础模型 为主


官方文档

和OPA的playground类似

在线编辑器


PERM元模型


黑白名单机制


ACL模式(较简单)



RBAC模式


RBAC模型会比ACL多一个g


多租户模式


又多了一个domain,域


Demo


非常简单…

第十一章:Casbin的代码使用、api调用、自定义比较方法

Casbin-开始使用

main.go:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

package main

import (
"fmt"

"github.com/casbin/casbin/v2"
)

func main() {

e, err := casbin.NewEnforcer("./model.conf", "./policy.csv")

sub := "alice" // 想要访问资源的用户。
obj := "data1" // 将被访问的资源。
act := "read" // 用户对资源执行的操作。

ok, err := e.Enforce(sub, obj, act)

if err != nil {
// 处理err
fmt.Printf("发生了错误%#v\n", err)
}

if ok == true {
// 允许alice读取data1
fmt.Println("通过了")
} else {
fmt.Println("未通过")
}

}

model.conf:

1
2
3
4
5
6
7
8
9
10
11
12
13
[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act

# 从 https://casbin.org/zh/docs/get-started 粘贴过来的

policy.csv:

1
2
3
p,zhangsan,data1,read

#最好维护在数据库中。casbin已经帮忙封装好了支持xorm或gorm的方法

另外可以通过AddPolicy方法,在代码而非policy.csv中新增一条policy

更好的方式是将policy.csv中的内容(CSV即逗号分隔值文件格),维护在数据库里,

casbin已经封装好了支持xorm或gorm的方法,用到时参照示例直接复制即可…


Demo地址