Limiting what Roles are shown on vyuldashev/nova-permission
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',
]),