permissions.gno
2.71 Kb · 98 lines
1package permissions
2
3import (
4 "chain/runtime"
5
6 "gno.land/p/gnoland/boards/exts/permissions"
7
8 "gno.land/r/gnoland/boards2/v1"
9)
10
11var (
12 // Admin is the address of the current realm admin.
13 Admin address = "g1rp7cmetn27eqlpjpc4vuusf8kaj746tysc0qgh" // GovDAO T1 multisig
14
15 // OpenAccountAmount is the ugnot required in an account for open board interactions.
16 // This requirement is only for non board members.
17 OpenAccountAmount int64 = 3_000_000_000
18)
19
20// SetAdmin sets a new realm admin address.
21func SetAdmin(_ realm, admin address) {
22 caller := runtime.PreviousRealm().Address()
23 if caller != Admin {
24 panic("unauthorized")
25 }
26
27 Admin = admin
28}
29
30// SetOpenAccountAmount sets the required amount in ugnot for open board interactions.
31func SetOpenAccountAmount(_ realm, amount int64) {
32 caller := runtime.PreviousRealm().Address()
33 if caller != Admin {
34 panic("unauthorized")
35 }
36
37 if amount < 0 {
38 panic("invalid amount")
39 }
40
41 OpenAccountAmount = amount
42}
43
44// New creates custom permissions for open boards.
45func New(owner address) *permissions.Permissions {
46 perms := permissions.New(
47 permissions.UseSingleUserRole(),
48 permissions.WithSuperRole(boards2.RoleOwner),
49 )
50 perms.SetPublicPermissions(
51 boards2.PermissionThreadCreate,
52 boards2.PermissionThreadRepost,
53 boards2.PermissionReplyCreate,
54 )
55 perms.AddRole(
56 boards2.RoleAdmin,
57 boards2.PermissionBoardRename,
58 boards2.PermissionBoardFlaggingUpdate,
59 boards2.PermissionMemberInvite,
60 boards2.PermissionMemberInviteRevoke,
61 boards2.PermissionMemberRemove,
62 boards2.PermissionThreadCreate,
63 boards2.PermissionThreadEdit,
64 boards2.PermissionThreadDelete,
65 boards2.PermissionThreadRepost,
66 boards2.PermissionThreadFlag,
67 boards2.PermissionThreadFreeze,
68 boards2.PermissionReplyCreate,
69 boards2.PermissionReplyDelete,
70 boards2.PermissionReplyFlag,
71 boards2.PermissionRoleChange,
72 boards2.PermissionUserBan,
73 boards2.PermissionUserUnban,
74 )
75 perms.AddRole(
76 boards2.RoleModerator,
77 boards2.PermissionThreadCreate,
78 boards2.PermissionThreadEdit,
79 boards2.PermissionThreadRepost,
80 boards2.PermissionThreadFlag,
81 boards2.PermissionReplyCreate,
82 boards2.PermissionReplyFlag,
83 boards2.PermissionUserBan,
84 boards2.PermissionUserUnban,
85 )
86 perms.AddRole(
87 boards2.RoleGuest,
88 boards2.PermissionThreadRepost,
89 boards2.PermissionReplyCreate,
90 )
91 perms.SetUserRoles(owner, boards2.RoleOwner)
92 perms.ValidateFunc(boards2.PermissionBoardRename, validateOpenBoardRename)
93 perms.ValidateFunc(boards2.PermissionMemberInvite, validateOpenMemberInvite)
94 perms.ValidateFunc(boards2.PermissionRoleChange, validateOpenRoleChange)
95 perms.ValidateFunc(boards2.PermissionThreadCreate, validateOpenThreadCreate)
96 perms.ValidateFunc(boards2.PermissionReplyCreate, validateOpenReplyCreate)
97 return perms
98}