...

Source file src/github.com/go-kit/kit/auth/casbin/middleware_test.go

Documentation: github.com/go-kit/kit/auth/casbin

     1  package casbin
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	stdcasbin "github.com/casbin/casbin/v2"
     8  	"github.com/casbin/casbin/v2/model"
     9  	fileadapter "github.com/casbin/casbin/v2/persist/file-adapter"
    10  )
    11  
    12  func TestStructBaseContext(t *testing.T) {
    13  	e := func(ctx context.Context, i interface{}) (interface{}, error) { return ctx, nil }
    14  
    15  	m := model.NewModel()
    16  	m.AddDef("r", "r", "sub, obj, act")
    17  	m.AddDef("p", "p", "sub, obj, act")
    18  	m.AddDef("e", "e", "some(where (p.eft == allow))")
    19  	m.AddDef("m", "m", "r.sub == p.sub && keyMatch(r.obj, p.obj) && regexMatch(r.act, p.act)")
    20  
    21  	a := fileadapter.NewAdapter("testdata/keymatch_policy.csv")
    22  
    23  	ctx := context.WithValue(context.Background(), CasbinModelContextKey, m)
    24  	ctx = context.WithValue(ctx, CasbinPolicyContextKey, a)
    25  
    26  	// positive case
    27  	middleware := NewEnforcer("alice", "/alice_data/resource1", "GET")(e)
    28  	ctx1, err := middleware(ctx, struct{}{})
    29  	if err != nil {
    30  		t.Fatalf("Enforcer returned error: %s", err)
    31  	}
    32  	_, ok := ctx1.(context.Context).Value(CasbinEnforcerContextKey).(*stdcasbin.Enforcer)
    33  	if !ok {
    34  		t.Fatalf("context should contains the active enforcer")
    35  	}
    36  
    37  	// negative case
    38  	middleware = NewEnforcer("alice", "/alice_data/resource2", "POST")(e)
    39  	_, err = middleware(ctx, struct{}{})
    40  	if err == nil {
    41  		t.Fatalf("Enforcer should return error")
    42  	}
    43  }
    44  
    45  func TestFileBaseContext(t *testing.T) {
    46  	e := func(ctx context.Context, i interface{}) (interface{}, error) { return ctx, nil }
    47  	ctx := context.WithValue(context.Background(), CasbinModelContextKey, "testdata/basic_model.conf")
    48  	ctx = context.WithValue(ctx, CasbinPolicyContextKey, "testdata/basic_policy.csv")
    49  
    50  	// positive case
    51  	middleware := NewEnforcer("alice", "data1", "read")(e)
    52  	_, err := middleware(ctx, struct{}{})
    53  	if err != nil {
    54  		t.Fatalf("Enforcer returned error: %s", err)
    55  	}
    56  }
    57  

View as plain text