permissions_validators.gno

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