This tool allows you to create and manage rules and permissions for nova resources, actions & tools. After installation, the default nova resource permissions will be generated for all available resources and resource actions as well as global Nova Tools.
In addition we can also define custom_permissions
in configuration permission
, which can be either linked with a resource or be created as global Custom Permission
. Which are accessed via $permissionName-CustomPermission
, ending with -CustomPermission
to separate them from system generated permissions to avoid overrides.
This tool uses Spatie Permission package.
You can install the package via composer:
composer require digitalcloud/nova-permission-tool
You can publish the migration with:
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"
After the migration has been published you can create the role- and permission-tables by running the migrations:
php artisan migrate
- You must register the tool with Nova. This is typically done in the tools method of the NovaServiceProvider, in app/Providers/NovaServiceProvider.php.
use DigitalCloud\PermissionTool\PermissionTool;
// ....
public function boot()
{
// ...
PermissionTool::register();
}
public function tools()
{
return [
// ...
new PermissionTool(),
// ...
];
}
-
Specify SuperAdmins who can access permissions without being allocated any permissions in config('permission.permissions.admin_emails')
-
To allow the tool to generate permissions actions, you need to se the name of the action. Actions with no names will not be generated automatically.
<?php
namespace App\Nova\Actions;
use Laravel\Nova\Actions\Action;
class YourAction extends Action {
// ...
public $name = 'send email';
// ...
}
- and then in the resource you can authorize the action:
<?php
namespace App\Nova;
use App\Nova\Actions\YourAction;
use Illuminate\Support\Facades\Gate;
use Illuminate\Http\Request;
class Quotation extends Resource {
// ...
public function actions(Request $request) {
return [
(new YourAction())->canSee(function ($request) {
return Gate::check('send email'); // the same name of the action
})->canRun(function ($request) {
return Gate::check('send email'); // the same name of the action
})
];
}
// ...
}
[] Do not show action permission. (Depreciated: Action without name does not show)