...
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
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
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
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