Role validation

default discord avatar
shisue
last month
4

Hi,



I'm creating the user roles, and I want to make the role of organization Manager require the field organization to be filled.



I am currently using validate on the organization field, such that I check if the role organizationMember was added or not. The issue is, the value is checked against the "current" state of user, such that I am able to add the role organizationMember without failing the check, but after the role being added, the check starts working and requesting the field organization to be filled.



I want to make it so the role cannot be added unless the field is filled.



{ name: 'organization', label: 'Organization', type: 'text', validate: (value, { user }) => { console.log(user) if (user?.roles.includes('organizationManager') || user?.roles.includes('organizationMember')) { return value ? true : 'Please provide a value' } return true; }, // relationTo: 'organizations', // hasMany: false, },
  • default discord avatar
    superwafflepuffs
    last month

    what does your roles field look like?



    if it's a select you can use

    filterOptions
  • default discord avatar
    shisue
    last month

    Yea it is, it looks like this:



    { name: 'roles', label: 'Roles', type: 'select', hasMany: true, defaultValue: ['user'], options: [ { label: 'User', value: 'user', }, { label: 'Admin', value: 'admin', }, { label: 'Organization Manager', value: 'organizationManager', }, { label: 'Organization Member', value: 'organizationMember', }, { label: 'Funder', value: 'funder', }, { label: 'Facilitator', value: 'facilitator', } ], access: { read: () => true, update: () => true, create: () => true, }, saveToJWT: true, hooks: { beforeChange: [protectRoles], }, },
  • default discord avatar
    superwafflepuffs
    last month

    I think you can move your validation to the roles field in your user object



    {
      name: 'roles',
      type: 'relationship',
      relationTo: 'roles',
      hasMany: true,
      validate (val, { data }) {
        if (val.includes('organizationManager') && !data.organization.length) {
          return 'You must provide an Organization Name to use the Organization Manager Role';
        }
        return true;
      }
    }


    something like that (not tested)

  • default discord avatar
    shisue
    last month

    Thanks! That logic worked

Open the post
Continue the discussion in Discord
Like what we're doing?
Star us on GitHub!

Star

Connect with the Payload Community on Discord

Discord

online

Can't find what you're looking for?

Get help straight from the Payload team with an Enterprise License.