Casbin是一个强大的,高效的开源访问控制框架,其权限管理机制支持多种访问控制模型,各个编程语言都对casbin有支持
目前我的所有项目,都是基于简单的角色管理来的
分为了三类,未登录能访问的,普通用户能访问的,管理员能访问的
后续做rbac系统,那就会把角色和访问控制结合起来,casbin就可以更好的帮助我去做这个事情
网上关于casbin的文档其实还挺多的,但是他们的案例很多都不太适合,新手第一次看很容易看懵
这个文档就结合实际的web中的访问控制来进行讲解
基本使用
下载
go get github.com/casbin/casbin/v2
casbin有两个部分组成,一个是配置文件,一个是规则集
初次学习,先把demo跑通,先不用搞懂这两个东西是什么
准备两个文件,model.pml和policy.csv文件
model.pml
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, act
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
[policy_effect]
e = some(where (p.eft == allow))
policy.csv
p, zhangsan, /index, GET
p, zhangsan, /home, GET
p, zhangsan, /users, GET
p, zhangsan, /users, POST
p, wangwu, /index, GET
p, wangwu, /home, GET
demo.go
package main
import (
"fmt"
"github.com/casbin/casbin/v2"
"log"
)
func check(e *casbin.Enforcer, sub, obj, act string) {
ok, _ := e.Enforce(sub, obj, act)
if ok {
fmt.Printf("%s CAN %s %s\n", sub, act, obj)
} else {
fmt.Printf("%s CANNOT %s %s\n", sub, act, obj)
}
}
func main() {
e, err := casbin.NewEnforcer("./model.pml", "./policy.csv")
if err != nil {
log.Fatalf("NewEnforecer failed:%v\n", err)
}
check(e, "zhangsan", "/index", "GET")
check(
Casbin访问控制框架的使用与接入

最低0.47元/天 解锁文章
4313

被折叠的 条评论
为什么被折叠?



