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
531 0
33activiti - 并行网关(parallelGateWay)
33activiti - 并行网关(parallelGateWay)
738 0
|
2月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
263 4
|
存储 域名解析 缓存
|
10月前
|
数据采集 自然语言处理 DataWorks
阿里云DataWorks接入DeepSeek大模型
2025年2月18日,阿里云DataWorks正式接入DeepSeek-R1(671B)与DeepSeek-R1-Distill-Qwen-32B大模型。此举显著提升平台的数据处理、分析和治理能力,简化数据开发流程,并支持智能数据查询、自动化报告生成等应用场景,推动企业级数据治理智能化进程,助力企业实现数据驱动的创新发展。
637 11
|
9月前
|
自然语言处理 安全 API
1688 跨境属性 API 接口(1688API 系列)
1688跨境属性API助力跨境电商发展,提供商品目标市场适配、跨境物流、国际认证及语言文化属性等数据,支持HTTP GET/POST请求。开发者可通过商品ID、目标市场代码和语言参数精准获取信息,提升业务效率与精准度。示例代码展示了如何使用Python进行GET请求,获取商品跨境属性,确保数据准确可靠。
|
JSON 安全 Go
Go语言中使用JWT鉴权、Token刷新完整示例,拿去直接用!
本文介绍了如何在 Go 语言中使用 Gin 框架实现 JWT 用户认证和安全保护。JWT(JSON Web Token)是一种轻量、高效的认证与授权解决方案,特别适合微服务架构。文章详细讲解了 JWT 的基本概念、结构以及如何在 Gin 中生成、解析和刷新 JWT。通过示例代码,展示了如何在实际项目中应用 JWT,确保用户身份验证和数据安全。完整代码可在 GitHub 仓库中查看。
2216 1
|
运维 监控 搜索推荐
【电商搜索】现代工业级电商搜索技术-Ha3搜索引擎平台简介
【电商搜索】现代工业级电商搜索技术-Ha3搜索引擎平台简介
|
消息中间件 监控 领域建模
DDD、中台和微服务的关系是什么?
领域驱动设计(DDD)和中台在企业架构中有着密切的关系。DDD的本质在于通过对业务领域的深入分析和建模,构建高内聚、低耦合的系统。而中台则是对企业核心业务能力的抽象和封装,以实现业务能力的复用和扩展。
249 1
|
XML JSON 人工智能
探索Gin框架:Golang Gin框架请求参数的获取
探索Gin框架:Golang Gin框架请求参数的获取