perm.gno
0.64 Kb ยท 44 lines
1package acl
2
3import "regexp"
4
5type perm struct {
6 verbs []string
7 resources []string
8}
9
10func (perm perm) hasPerm(verb, resource string) bool {
11 // check verb
12 verbOK := false
13 for _, pattern := range perm.verbs {
14 if match(pattern, verb) {
15 verbOK = true
16 break
17 }
18 }
19 if !verbOK {
20 return false
21 }
22
23 // check resource
24 for _, pattern := range perm.resources {
25 if match(pattern, resource) {
26 return true
27 }
28 }
29 return false
30}
31
32func match(pattern, target string) bool {
33 if pattern == ".*" {
34 return true
35 }
36
37 if pattern == target {
38 return true
39 }
40
41 // regexp handling
42 match, _ := regexp.MatchString(pattern, target)
43 return match
44}