mlsen / casbin-redis-adapter

Redis Adapter for Casbin
Apache License 2.0
4 stars 5 forks source link

Wrong function type error on latest casbin version #4

Open novrian opened 1 year ago

novrian commented 1 year ago

Here is the code:

package main

import (
    "log"

    "github.com/casbin/casbin/v2"
    casModel "github.com/casbin/casbin/v2/model"
    "github.com/casbin/casbin/v2/persist"
    redisadapter "github.com/mlsen/casbin-redis-adapter/v2"
    "github.com/pkg/errors"
)

func main() {
    _, err := initCasbin()
    if err != nil {
        log.Fatal(err)
    }
}

var (
    model string = `
[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
    `
)

func initCasbin() (casbin.IEnforcer, error) {
    mdl, err := casModel.NewModelFromString(model)
    if err != nil {
        return nil, errors.Wrap(err, "failed to load casbin model")
    }

    redisAdapter, err := initRedisAdapter()
    if err != nil {
        return nil, errors.Wrap(err, "failed to initiate redis adapeter")
    }

    enforcer, err := casbin.NewEnforcer(mdl, redisAdapter)
    if err != nil {
        return nil, errors.Wrap(err, "failed to create enforcer")
    }

    return enforcer, nil
}

func initRedisAdapter() (persist.Adapter, error) {
    redis, err := redisadapter.NewFromURL("redis://@localhost:6379/0")
    if err != nil {
        return nil, errors.Wrap(err, "unable connect to redis")
    }
    return redis, nil
}

My go.mod

module github.com/novrian/casbin-research

go 1.20

require (
    github.com/casbin/casbin/v2 v2.71.1
    github.com/mlsen/casbin-redis-adapter/v2 v2.0.1
    github.com/pkg/errors v0.9.1
)

require (
    github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible // indirect
    github.com/cespare/xxhash/v2 v2.1.1 // indirect
    github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
    github.com/go-redis/redis/v8 v8.4.8 // indirect
    go.opentelemetry.io/otel v0.15.0 // indirect
)

I've encounter error when I run the code

# github.com/mlsen/casbin-redis-adapter/v2
vendor/github.com/mlsen/casbin-redis-adapter/v2/adapter.go:53:34: cannot use persist.LoadPolicyLine (value of type func(line string, m model.Model) error) as func(string, model.Model) value in argument to a.loadPolicy

My Go Version:

go version go1.20 darwin/arm64
novrian commented 1 year ago

Crystal clear error message, the problem must be here

https://github.com/mlsen/casbin-redis-adapter/blob/master/adapter.go#L54C48-L54C48

Function type is incompatible with persist.LoadPolicyArray

novrian commented 1 year ago

@mlsen I will try to fix this issue, and submit PR soon. thanks