+1
-17
rbac/rbac.go
+1
-17
rbac/rbac.go
···
3
import (
4
"database/sql"
5
"fmt"
6
-
"path"
7
"strings"
8
9
adapter "github.com/Blank-Xu/sql-adapter"
···
26
e = some(where (p.eft == allow))
27
28
[matchers]
29
-
m = r.act == p.act && r.dom == p.dom && keyMatch2(r.obj, p.obj) && g(r.sub, p.sub, r.dom)
30
`
31
)
32
···
34
E *casbin.Enforcer
35
}
36
37
-
func keyMatch2(key1 string, key2 string) bool {
38
-
matched, _ := path.Match(key2, key1)
39
-
return matched
40
-
}
41
-
42
func NewEnforcer(path string) (*Enforcer, error) {
43
m, err := model.NewModelFromString(Model)
44
if err != nil {
···
61
}
62
63
e.EnableAutoSave(false)
64
-
65
-
e.AddFunction("keyMatch2", keyMatch2Func)
66
67
return &Enforcer{e}, nil
68
}
···
209
}
210
211
return permissions
212
-
}
213
-
214
-
// keyMatch2Func is a wrapper for keyMatch2 to make it compatible with Casbin
215
-
func keyMatch2Func(args ...interface{}) (interface{}, error) {
216
-
name1 := args[0].(string)
217
-
name2 := args[1].(string)
218
-
219
-
return keyMatch2(name1, name2), nil
220
}
221
222
func checkRepoFormat(repo string) error {
···
3
import (
4
"database/sql"
5
"fmt"
6
"strings"
7
8
adapter "github.com/Blank-Xu/sql-adapter"
···
25
e = some(where (p.eft == allow))
26
27
[matchers]
28
+
m = r.act == p.act && r.dom == p.dom && r.obj == p.obj && g(r.sub, p.sub, r.dom)
29
`
30
)
31
···
33
E *casbin.Enforcer
34
}
35
36
func NewEnforcer(path string) (*Enforcer, error) {
37
m, err := model.NewModelFromString(Model)
38
if err != nil {
···
55
}
56
57
e.EnableAutoSave(false)
58
59
return &Enforcer{e}, nil
60
}
···
201
}
202
203
return permissions
204
}
205
206
func checkRepoFormat(repo string) error {