将现有的gorm连接用于Casbin New

问题描述

我已将casbin连接到我的项目,并且运行良好,但是从这里我遇到了一个问题 这是当前的我的代码(一部分):

func RBAC(conf config.DatabaseConfig) (*RBACConfig,error) {
    var url string

    model,err := model2.NewModelFromString(rbacModel)
    if err != nil {
        return nil,err
    }

    url = fmt.Sprintf("dbname=%s user=%s password=%s host=%s port=%d",conf.Database,conf.Username,conf.Password,conf.Hostname,conf.Port)

    dbAdapter,err := xormadapter.NewAdapter(conf.Adapter,url,true)
    if err != nil {
        return nil,err
    }

    enforcer,err := casbin.NewEnforcer(model,dbAdapter)
    if err != nil {
        return nil,err
    }

    err = enforcer.LoadPolicy()
    if err != nil {
        return nil,err
    }

    return &RBACConfig{Enforcer: enforcer },nil
}

但是问题是我想使用已经存在的gorm连接,而不是创建新的gorm连接,是否可以以某种方式重写它?或其他解决方法

示例我尝试过的方法(不起作用):

func RBAC(db *database.DB) (*RBACConfig,error) {

    model,*db)
    if err != nil {
        return nil,nil
}

并收到错误消息:

恐慌:接口转换:database.DB不持久。适配器: 缺少方法AddPolicy goroutine 1 [正在运行]: github.com/casbin/casbin/v2.NewEnforcer(0xc000527ad0,0x2,0x2,0x0, 0x0、0xc000000004) /opt/go/pkg/mod/github.com/casbin/casbin/v2@v2.16.0/enforcer.go:97 + 0x380 app.com/app/server/middleware.RBAC(0xc000010568,0x16b3c4c,0xc,0xc0004924f0) /opt/go/src/app.com/app/server/middleware/rbac.go:89 + 0xac app.com/app/server.New(0xc0001000e0、0xc0000b4120、0xc000010568、0x6) /opt/go/src/app.com/app/server/server.go:44 + 0x81a main.main() /opt/go/src/app.com/app/main.go:38 + 0x213退出状态2

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)