kodekeep/nova-permission

A Laravel Nova resource tool for spatie/laravel-permission.


Keywords
kodekeep, nova-permission, acl, laravel, nova, permissions, php, roles
License
MPL-2.0

Documentation

Laravel Nova - Permission

Latest Version Software License Build Status Coverage Status Quality Score Total Downloads

This package was created by, and is maintained by Brian Faust, and provides a Laravel Nova resource tool for spatie/laravel-permission.

Installation

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

    // ...

];

Usage

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.

Preparing your User model and resource

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

Drivers

KodeKeep\NovaPermission\Drivers\Name (Default)

Used with Permissions::make('Permissions')->fromNameWithGroup() and Permissions::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.

KodeKeep\NovaPermission\Drivers\Eloquent

Used with Permissions::make('Permissions')->fromEloquentWithGroup() and Permissions::make('Permissions')->fromEloquentWithoutGroup().

The Eloquent driver will determine the group based on group attribute of the model.

Preparing the permissions table

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');
        });
    }
}

Testing

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

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.

Credits

This project exists thanks to all the people who contribute.

Support Us

We invest a lot of resources into creating and maintaining our packages. You can support us and the development through GitHub Sponsors.

License

Nova Permission is an open-sourced software licensed under the MPL-2.0.