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())
相关文章
|
JSON Go API
GO 权限管理之 Casbin
GO 权限管理之 Casbin
195 0
|
2月前
|
存储 Go
Go to Learn Go之接口
Go to Learn Go之接口
31 7
|
2月前
|
Go
Go to Learn Go之错误处理
Go to Learn Go之错误处理
47 7
|
2月前
|
Java 编译器 Go
Go to Learn Go之基础语法
Go to Learn Go之基础语法
19 0
|
3月前
|
算法 搜索推荐 Unix
快速指南: Go 1.19功能
快速指南: Go 1.19功能
|
6月前
|
存储 Go C语言
【GO基础】GO基础语法一
【GO基础】GO基础语法一
|
JSON 安全 Linux
Go 语言学习之 go tool
Go 语言学习之 go tool
108 0
|
Prometheus 监控 Cloud Native
Go:Promethus Eexporter开发,一篇带你玩妥它。
Go:Promethus Eexporter开发,一篇带你玩妥它。
|
Go Python
Go 语言快速入门指南:Go 函数
函数是一段代码的片段,包含连续的执行语句,它可以将零个或多个输入参数映射到零个或多个参数输出。函数像一个黑盒,对它的使用者隐藏实现细节。还可以在代码中通过函数调用来执行它们。
Go 语言快速入门指南:Go 函数