This package was created by, and is maintained by Brian Faust, and provides a Laravel Nova resource tool for spatie/laravel-permission.
Require this package, with Composer, in the root directory of your project.
composer require kodekeep/nova-permission
Next you'll need to register the tool with Nova. This is done in the tools
method of the NovaServiceProvider
.
<?php
namespace App\Providers;
use KodeKeep\NovaPermission\NovaPermissionTool;
use Laravel\Nova\Cards\Help;
use Laravel\Nova\Nova;
use Laravel\Nova\NovaApplicationServiceProvider;
class NovaServiceProvider extends NovaApplicationServiceProvider
{
// ...
public function tools()
{
return [
(new NovaPermissionTool())->canSee(function ($request) {
return $request->user()->hasRole('super-admin');
}),
];
}
// ...
}
Next you'll need to add the middleware to the middleware
list in config/nova.php
.
<?php
return [
// ...
'middleware' => [
'web',
Authenticate::class,
DispatchServingNovaEvent::class,
BootTools::class,
Authorize::class,
// ...
\KodeKeep\NovaPermission\ForgetCachedPermissions::class,
],
// ...
];
The KodeKeep\NovaPermission\Fields\Permissions
field can be used with any model that uses the Spatie\Permission\Traits\HasRoles
trait.
It will automatically load permissions from a model that uses this trait and render them inside the Nova UI based on your configured preferences.
If you wish to manage permissions directly on a user resource you will have to apply the same code to the User
model as you did to the Role
model and then add below code to the fields of your User
resource.
use KodeKeep\NovaPermission\Fields\Permissions;
use KodeKeep\NovaPermission\Helpers;
use Laravel\Nova\Fields\MorphToMany;
Permissions::make('Permissions'),
MorphToMany::make('Permissions', 'permissions', \KodeKeep\NovaPermission\Resources\Permission::class),
Used with
Permissions::make('Permissions')->fromNameWithGroup()
andPermissions::make('Permissions')->fromNameWithoutGroup()
.
The Name
driver will determine the group based on the name of the permission.
If you have a permission called view posts
it will assume that posts
is the group of the permission.
Used with
Permissions::make('Permissions')->fromEloquentWithGroup()
andPermissions::make('Permissions')->fromEloquentWithoutGroup()
.
The Eloquent
driver will determine the group based on group
attribute of the model.
php artisan make:migration add_group_to_permissions_table --table=permissions
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddGroupToPermissionsTable extends Migration
{
/**
* Run the migrations.
*/
public function up()
{
Schema::table('permissions', function (Blueprint $table) {
$table->string('group');
});
}
/**
* Reverse the migrations.
*/
public function down()
{
Schema::table('permissions', function (Blueprint $table) {
$table->dropColumn('group');
});
}
}
composer test
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
If you discover a security vulnerability within this package, please send an e-mail to hello@kodekeep.com. All security vulnerabilities will be promptly addressed.
This project exists thanks to all the people who contribute.
We invest a lot of resources into creating and maintaining our packages. You can support us and the development through GitHub Sponsors.
Nova Permission is an open-sourced software licensed under the MPL-2.0.