Search Apps Documentation Source Content File Folder Download Copy Actions Download

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}