This package makes it easy to view and manage Laravel Pennant features for your Laravel application inside of Nova.
You can install the Nova tool via Composer:
composer require laravel/nova-pennant
Next, you must register the tool within the User Resource.
use Laravel\Nova\PennantTool\PennantTool;
/**
* Get the fields displayed by the resource.
*
* @return array
*/
public function fields(NovaRequest $request)
{
return [
ID::make()->sortable(),
Text::make('Name')
->sortable()
->rules('required', 'max:255'),
Text::make('Email')
->sortable()
->rules('required', 'email', 'max:254')
->creationRules('unique:users,email')
->updateRules('unique:users,email,{{resourceId}}'),
Password::make('Password')
->onlyOnForms()
->creationRules('required', Rules\Password::defaults())
->updateRules('nullable', Rules\Password::defaults()),
PennantTool::make(),
];
}
By default, Nova users will not have access to activate or deactivate features when they are authorized to see the resource. You need to use the canRun()
method to authorize all or specific users.
use Laravel\Nova\Http\Requests\NovaRequest;
use Laravel\Nova\Nova;
use Laravel\Nova\PennantTool\PennantTool;
// ...
PennantTool::make()
->canRun(fn (NovaRequest $request) => Nova::user($request)->admin),
You can also require the user to confirm their password before activating or deactivating a feature by using requiresConfirmPassword()
method:
use Laravel\Nova\PennantTool\PennantTool;
// ...
PennantTool::make()
->requiresConfirmPassword(),
In order to configure rich values Nova would need to depend on a class-based feature and utilize options(mixed $scope)
method:
namespace App\Features;
class UserTier
{
public $name = 'user-tier';
+ public function options(mixed $scope): array
+ {
+ return ['solo', 'pro'];
+ }
}