permissions_validators.gno
2.78 Kb ยท 126 lines
1package boards2
2
3import (
4 "errors"
5 "std"
6)
7
8// validateBoardCreate validates PermissionBoardCreate.
9//
10// Expected `args` values:
11// 1. Caller address
12// 2. Board name
13// 3. Board ID
14// 4. Is board listed
15func validateBoardCreate(_ Permissions, args Args) error {
16 caller, ok := args[0].(std.Address)
17 if !ok {
18 return errors.New("expected a valid caller address")
19 }
20
21 name, ok := args[1].(string)
22 if !ok {
23 return errors.New("expected board name to be a string")
24 }
25
26 if err := checkBoardNameIsNotAddress(name); err != nil {
27 return err
28 }
29
30 if err := checkBoardNameBelongsToAddress(caller, name); err != nil {
31 return err
32 }
33 return nil
34}
35
36// validateBoardRename validates PermissionBoardRename.
37//
38// Expected `args` values:
39// 1. Caller address
40// 2. Board ID
41// 3. Current board name
42// 4. New board name
43func validateBoardRename(_ Permissions, args Args) error {
44 caller, ok := args[0].(std.Address)
45 if !ok {
46 return errors.New("expected a valid caller address")
47 }
48
49 newName, ok := args[3].(string)
50 if !ok {
51 return errors.New("expected new board name to be a string")
52 }
53
54 if err := checkBoardNameIsNotAddress(newName); err != nil {
55 return err
56 }
57
58 if err := checkBoardNameBelongsToAddress(caller, newName); err != nil {
59 return err
60 }
61 return nil
62}
63
64// validateMemberInvite validates PermissionMemberInvite.
65//
66// Expected `args` values:
67// 1. Caller address
68// 2. Board ID
69// 3. User address
70// 4. Role
71func validateMemberInvite(perms Permissions, args Args) error {
72 caller, ok := args[0].(std.Address)
73 if !ok {
74 return errors.New("expected a valid caller address")
75 }
76
77 // Make sure that only owners invite other owners
78 role, ok := args[3].(Role)
79 if !ok {
80 return errors.New("expected a valid new member role")
81 }
82
83 if role == RoleOwner {
84 if !perms.HasRole(caller, RoleOwner) {
85 return errors.New("only owners are allowed to invite other owners")
86 }
87 }
88 return nil
89}
90
91// validateRoleChange validates PermissionRoleChange.
92//
93// Expected `args` values:
94// 1. Caller address
95// 2. Board ID
96// 3. Member address
97// 4. Role
98func validateRoleChange(perms Permissions, args Args) error {
99 caller, ok := args[0].(std.Address)
100 if !ok {
101 return errors.New("expected a valid caller address")
102 }
103
104 // Owners and Admins can change roles.
105 // Admins should not be able to assign or remove the Owner role from members.
106 if perms.HasRole(caller, RoleAdmin) {
107 role, ok := args[3].(Role)
108 if !ok {
109 return errors.New("expected a valid member role")
110 }
111
112 if role == RoleOwner {
113 return errors.New("admins are not allowed to promote members to Owner")
114 } else {
115 member, ok := args[2].(std.Address)
116 if !ok {
117 return errors.New("expected a valid member address")
118 }
119
120 if perms.HasRole(member, RoleOwner) {
121 return errors.New("admins are not allowed to remove the Owner role")
122 }
123 }
124 }
125 return nil
126}