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', ]),