Limiting what Roles are shown on vyuldashev/nova-permission

Published on Jul 28, 2021

While working on a project that used Nova to assign roles to users, I did not want a particular role to be part of the choices for the RoleBooleanGroup field.

Looking through the Issues of the repo on GitHub, I saw this one that described the same problem that I had. I checked out the source code of the RoleBooleanGroup from the package and saw that it did this in the constructor.

$options = $roleClass::get()->pluck($labelAttribute ?? 'name', 'name')->toArray(); $this->options($options);

It was fetching all roles from the database and building an associative array out of it then passes it all to the parent's options() method. I thought about extending the class and adding a new constructor option but it didn't feel right. Ended up doing this instead.

namespace App\Nova\Fields; class RoleBooleanGroup extends \Vyuldashev\NovaPermission\RoleBooleanGroup { public function withOptions(array $options): self { $this->options($options); return $this; } }

This was a better solution and it allowed me to do something as simple as this on my User Resource's fields() method.

RoleBooleanGroup::make('Roles') ->withOptions([ 'Agent' => 'Agent', 'Supervisor' => 'Supervisor', ]),