casbin 简介
casbin 简记
中文开发文档 casbin.org/zh/docs/supported-model...
1 下载安装
go get github.com/casbin/casbin/v2
go get github.com/casbin/mysql-adapter/v2 // 初始化 MySQL 适配器(自动创建 casbin_rule 表,无需手动建表)
2 配置
有两部分组成,一个是配置文件,一共是规则集
如ACL 模型
model.conf
[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
policy.csv
p, zhangsan, /index, GET
p, zhangsan, /home, GET
p, zhangsan, /users, GET
p, zhangsan, /users, POST
p, wangwu, /index, GET
demo
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.conf", "./policy.csv")
if err != nil {
log.Fatal("NewEnforcer failed %v\n", err)
}
check(e, "zhangsan", "/index", "GET")
check(e, "zhangsan", "/home", "GET")
check(e, "wangwu", "/index", "GET")
}
新增策略
e.AddPolicy("wangwu","/home","POST") //新增到内存当中
e.SavePolicy()
删除策略
e.RemovePolicy("wangwu","/home","POST") //删除
e.SavePolicy()
model.conf RBAC
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, act
[role_definition]
g = _, _
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act
policy.csv RBAC
P,admin,/index,GET
P,admin,/admin,GET
P,admin,/users,GET
P,yunwei,/index,GET
P,yunwei,/home,GET
P,yunwei,/users,GET
g,zhgnsan,admin
g,wangwu,yunwei
创建一个角色对应用户的关系
e.AddRoleForUser("wangwu","admin")
e.SavePolicy()
删除用户-角色对应的关系
e.RemoveGroupingPolicy("wangwu","admin")
e.SavePolicy()
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
推荐文章: