digitalcloud / nova-permission-tool
A Laravel Nova Permission tool.
Installs: 2 283
Dependents: 0
Suggesters: 0
Security: 0
Stars: 14
Watchers: 5
Forks: 12
Open Issues: 3
Requires
- php: >=7.1.0
- spatie/laravel-permission: ^2.22
This package is auto-updated.
Last update: 2024-10-21 21:56:19 UTC
README
This tool allows you to create and manage rules and permissions for nova resources. After installation, the default nova resource permissions will be generated for all available resources and resource actions.
Requirements & Dependencies
This tool uses Spatie Permission package.
Installation
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
Usage
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 tools() { return [ // ... new PermissionTool(), // ... ]; }
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 }) ]; } // ... }