-
Notifications
You must be signed in to change notification settings - Fork 0
/
permission.go
74 lines (61 loc) · 1.48 KB
/
permission.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
package kaoriJwt
import (
"errors"
"github.com/CodeOfTheKnight/Kaori/kaoriDatabase"
)
type Permission string
/*PRIVILEGI: ucta
u: User = Accesso base
c: Creator = Accesso alle api di verifica dati aggiunti da utenti
t: Tester = Accesso alle api di test
a: Admin = tutti gli accessi
*/
const (
UserPerm Permission = "u"
CreatorPerm Permission = "c"
TesterPerm Permission = "t"
AdminPerm Permission = "a"
)
func runeToPermission(r rune) (Permission, error) {
switch string(r) {
case UserPerm.ToString():
return UserPerm, nil
case CreatorPerm.ToString():
return CreatorPerm, nil
case TesterPerm.ToString():
return TesterPerm, nil
case AdminPerm.ToString():
return AdminPerm, nil
default:
return Permission(""), errors.New("Error, permission not setted!")
}
}
func (p Permission) ToString() string {
return string(p)
}
func GetPermissionFromDB(db *kaoriDatabase.NoSqlDb, email string) (Permission, error) {
//Get permissions
document, err := db.Client.C.Collection("User").Doc(email).Get(db.Client.Ctx)
if err != nil {
return "", err
}
data := document.Data()
permString := data["Permission"].(string)
return Permission(permString), nil
}
func IsAuthorized(perms []Permission, permsRequire ...Permission) bool {
myFunc := func(permss []Permission, permReq Permission) bool {
for _, p := range permss {
if p == permReq {
return true
}
}
return false
}
for _, preq := range permsRequire {
if !myFunc(perms, preq) {
return false
}
}
return true
}