package boards2
import (
"gno.land/p/gnoland/boards"
"gno.land/p/gnoland/boards/exts/permissions"
)
const (
RoleOwner boards.Role = "owner"
RoleAdmin = "admin"
RoleModerator = "moderator"
RoleGuest = "guest"
)
const (
PermissionBoardCreate boards.Permission = "board:create"
PermissionBoardFlaggingUpdate = "board:flagging-update"
PermissionBoardFreeze = "board:freeze"
PermissionBoardRename = "board:rename"
PermissionMemberInvite = "member:invite"
PermissionMemberInviteRevoke = "member:invite-remove"
PermissionMemberRemove = "member:remove"
PermissionPermissionsUpdate = "permissions:update"
PermissionRealmHelp = "realm:help"
PermissionRealmLock = "realm:lock"
PermissionRealmNotice = "realm:notice"
PermissionReplyCreate = "reply:create"
PermissionReplyDelete = "reply:delete"
PermissionReplyFlag = "reply:flag"
PermissionRoleChange = "role:change"
PermissionThreadCreate = "thread:create"
PermissionThreadDelete = "thread:delete"
PermissionThreadEdit = "thread:edit"
PermissionThreadFlag = "thread:flag"
PermissionThreadFreeze = "thread:freeze"
PermissionThreadRepost = "thread:repost"
PermissionUserBan = "user:ban"
PermissionUserUnban = "user:unban"
)
func createBasicBoardPermissions(owner address) *permissions.Permissions {
perms := permissions.New(
permissions.UseSingleUserRole(),
permissions.WithSuperRole(RoleOwner),
)
perms.AddRole(
RoleAdmin,
PermissionBoardRename,
PermissionBoardFlaggingUpdate,
PermissionMemberInvite,
PermissionMemberInviteRevoke,
PermissionMemberRemove,
PermissionThreadCreate,
PermissionThreadEdit,
PermissionThreadDelete,
PermissionThreadRepost,
PermissionThreadFlag,
PermissionThreadFreeze,
PermissionReplyCreate,
PermissionReplyDelete,
PermissionReplyFlag,
PermissionRoleChange,
PermissionUserBan,
PermissionUserUnban,
)
perms.AddRole(
RoleModerator,
PermissionThreadCreate,
PermissionThreadEdit,
PermissionThreadRepost,
PermissionThreadFlag,
PermissionReplyCreate,
PermissionReplyFlag,
PermissionUserBan,
PermissionUserUnban,
)
perms.AddRole(
RoleGuest,
PermissionThreadCreate,
PermissionThreadRepost,
PermissionReplyCreate,
)
perms.SetUserRoles(owner, RoleOwner)
perms.ValidateFunc(PermissionBoardRename, validateBasicBoardRename)
perms.ValidateFunc(PermissionMemberInvite, validateBasicMemberInvite)
perms.ValidateFunc(PermissionRoleChange, validateBasicRoleChange)
return perms
}
func createOpenBoardPermissions(owner address) *permissions.Permissions {
perms := permissions.New(
permissions.UseSingleUserRole(),
permissions.WithSuperRole(RoleOwner),
)
perms.SetPublicPermissions(
PermissionThreadCreate,
PermissionReplyCreate,
)
perms.AddRole(
RoleAdmin,
PermissionBoardRename,
PermissionBoardFlaggingUpdate,
PermissionMemberInvite,
PermissionMemberInviteRevoke,
PermissionMemberRemove,
PermissionThreadCreate,
PermissionThreadEdit,
PermissionThreadDelete,
PermissionThreadRepost,
PermissionThreadFlag,
PermissionThreadFreeze,
PermissionReplyCreate,
PermissionReplyDelete,
PermissionReplyFlag,
PermissionRoleChange,
PermissionUserBan,
PermissionUserUnban,
)
perms.AddRole(
RoleModerator,
PermissionThreadCreate,
PermissionThreadEdit,
PermissionThreadRepost,
PermissionThreadFlag,
PermissionReplyCreate,
PermissionReplyFlag,
PermissionUserBan,
PermissionUserUnban,
)
perms.AddRole(
RoleGuest,
PermissionThreadCreate,
PermissionThreadRepost,
PermissionReplyCreate,
)
perms.SetUserRoles(owner, RoleOwner)
perms.ValidateFunc(PermissionBoardRename, validateOpenBoardRename)
perms.ValidateFunc(PermissionMemberInvite, validateOpenMemberInvite)
perms.ValidateFunc(PermissionRoleChange, validateOpenRoleChange)
perms.ValidateFunc(PermissionThreadCreate, validateOpenThreadCreate)
perms.ValidateFunc(PermissionReplyCreate, validateOpenReplyCreate)
return perms
}