casbin 简介

AI摘要
本文是Casbin权限管理框架的快速入门指南,包含安装、配置模型(ACL和RBAC)及策略操作。核心步骤:安装依赖、配置模型文件与策略、使用代码示例进行权限验证与策略管理。适用于Go开发者快速集成权限控制功能。

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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!