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}