-
Notifications
You must be signed in to change notification settings - Fork 6
/
acl.go
78 lines (60 loc) · 1.7 KB
/
acl.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package leancloud
import "fmt"
// ACL include permission group of object
type ACL struct {
content map[string]map[string]bool
}
// NewACL constructs a new ACL
func NewACL() *ACL {
acl := new(ACL)
acl.content = make(map[string]map[string]bool)
return acl
}
func NewACLWithUser(user *User) *ACL {
acl := NewACL()
acl.set(user.ID, "read", true)
acl.set(user.ID, "write", true)
return acl
}
func (acl *ACL) SetPublicReadAccess(allowed bool) {
acl.set("*", "read", allowed)
}
func (acl *ACL) SetPublicWriteAccess(allowed bool) {
acl.set("*", "write", allowed)
}
func (acl *ACL) SetWriteAccess(user *User, allowed bool) {
acl.set(user.ID, "write", allowed)
}
func (acl *ACL) SetReadAccess(user *User, allowed bool) {
acl.set(user.ID, "read", allowed)
}
func (acl *ACL) SetRoleReadAccess(role *Role, allowed bool) {
acl.set(fmt.Sprint("role:", role.Name), "read", allowed)
}
func (acl *ACL) SetRoleWriteAccess(role *Role, allowed bool) {
acl.set(fmt.Sprint("role:", role.Name), "write", allowed)
}
func (acl *ACL) GetPublicReadAccess() bool {
return acl.get("*", "read")
}
func (acl *ACL) GetPublicWriteAccess() bool {
return acl.get("*", "write")
}
func (acl *ACL) GetReadAccess(user *User) bool {
return acl.get(user.ID, "read")
}
func (acl *ACL) GetWriteAccess(user *User) bool {
return acl.get(user.ID, "write")
}
func (acl *ACL) GetRoleReadAccess(role *Role) bool {
return acl.get(fmt.Sprint("role:", role.Name), "read")
}
func (acl *ACL) GetRoleWriteAccess(role *Role) bool {
return acl.get(fmt.Sprint("role:", role.Name), "write")
}
func (acl *ACL) set(key, perm string, allowed bool) {
acl.content[key][perm] = allowed
}
func (acl *ACL) get(key, perm string) bool {
return acl.content[key][perm]
}