go-casbin

简介: go-casbin

go-casbin

简介

casbin 是一个开源访问框架,主要是由 两部分组成,model、policy 组成。policy 支持多种形式,如文件、数据库。model 为配置文件。

安装

go get github.com/casbin/casbin/v2
go mod tidy
go mod vendor

角色 rbac model 示例

rbac_model.conf

[request_definition]
r = sub, dom, obj, act

[policy_definition]
p = sub, dom, obj, act

[role_definition]
g = _, _, _

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

[matchers]
m = g(r.sub, p.sub, r.dom) && r.dom == p.dom && r.obj == p.obj && r.act == p.act || r.sub == "admin"

使用 mysql 作为 policy 存储示例

func InitCasbin(){
   
  // db 为数据库实例 CasbinRuleModel 为创建的表名称
    a, _ := gormadapter.NewAdapterByDBWithCustomTable(db.DB, &cb.CasbinRuleModel{
   }, "CasbinRuleModel")
  // 添加 model文件
    RB, _ = casbin.NewEnforcer("./internal/pkg/config/rbac_model.conf", a)
  // 将规则加载到内存中
    RB.LoadPolicy()
}

gin 中间件示例

func CasbinHandler() gin.HandlerFunc {
   
    return func(ctx *gin.Context) {
   
        response := app.NewResponse(ctx)
        // 获取请求的参数
        //user := ctx.Request.Header.Get("username")
        user, _ := ctx.Get("username")
        proj := ctx.Query("project")
        obj := ctx.Query("env") + "-" +ctx.Query("object")
        act := ctx.Query("action")
        fmt.Println("111")
        fmt.Println(user, proj, obj, act)
        // 判断策略中是否存在
        success, _ := common.RB.Enforce(user, proj, obj, act)
        if success {
   
            logger.LogInstance.Info("权限验证通过")
            ctx.Next()
        } else {
   
            logger.LogInstance.Error("e.Enforce err: %s", "权限验证没有通过")
            response.ToErrorResponse(errcode.UnauthorizedAuthFail)
            ctx.Abort()
            return
        }
    }
}

router 使用示例

    demo1 := e.Group("/demo1")
    demo1.Use(middleware.JWTAuthMiddleware())
    demo1.Use(handler.CasbinHandler())
相关文章
|
11月前
|
JSON Go API
GO 权限管理之 Casbin
GO 权限管理之 Casbin
178 0
|
11天前
|
Go
Go to Learn Go之错误处理
Go to Learn Go之错误处理
34 7
|
11天前
|
Go
Go to Learn Go之文件操作
Go to Learn Go之文件操作
17 8
|
11天前
|
存储 Go
Go to Learn Go之接口
Go to Learn Go之接口
25 7
|
2月前
|
算法 搜索推荐 Unix
快速指南: Go 1.19功能
快速指南: Go 1.19功能
|
10月前
|
存储 JSON 监控
go配置解析库 - viper
go配置解析库 - viper
|
NoSQL 关系型数据库 MySQL
学习golang(9) 初探:go path与go mod
学习golang(9) 初探:go path与go mod
187 1
|
存储 缓存 监控
Go源码之netpoll.go文件详解
Go源码之netpoll.go文件详解
198 0
|
存储 Go
在 Go 中如何使用 Viper 来管理配置 2
在 Go 中如何使用 Viper 来管理配置
209 0
|
存储 JSON 监控
在 Go 中如何使用 Viper 来管理配置 1
在 Go 中如何使用 Viper 来管理配置
365 0