Search Apps Documentation Source Content File Folder Download Copy Actions Download

permissions.gno

2.72 Kb · 100 lines
  1package permissions
  2
  3import (
  4	"chain/runtime/unsafe"
  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 := unsafe.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 := unsafe.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}
 99
100