Skip to content
This repository has been archived by the owner on Mar 2, 2023. It is now read-only.
/ permission-group Public archive

Permission Group for Laravel Nova allows for the management of various permission values within a single JSON column.

Notifications You must be signed in to change notification settings

daliendev/permission-group

Repository files navigation

PermissionGroup Field

Prerequisites

  1. Laravel Nova 4 installed in your application
  2. Composer installed on your system

Installation

composer require daliendev/permissiongroup

Prepare your migrations

You will need a column in JSON format.

class CreateRolesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('roles', function (Blueprint $table) {
            ...
            $table->json('permissions')->nullable();
            ...
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('roles');
    }
}

Basic Usage

To use the PermissionGroup field in your Nova application, you need to add the field to your Nova resource. To do this, simply add the following code:

use Daliendev\PermissionGroup

public function fields(Request $request)
{
    return [
        ...
        PermissionGroup::make('Permissions', 'permissions')  
        ->on(User::class)  
        ->on(Role::class)  
        ...
    ];
}

This will display two CRUD oriented BooleanGroups and all the value will be stored in same {permissions} attribute/column of your model.

Custom permissions can also be specified (in addition to the CRUD on a resource and as an independent group):

    PermissionGroup::make('Permissions', 'permissions')  
        ->on(User::class, [  
            'test' => 'Test'  
        ])  
        ->on(Role::class)  
        ->with('Other', [
            'can_view_secret_page' => 'can view secret page'
        ])  
        ->with('Other2', [  
            'can_view_logs' => 'can view logs'  
        ]),

So permissions column of your role can store as much value as needed in JSON format:

["can_view_role", "can_view_user", "can_view_logs_other", "test_user"]

As all Laravel Nova Fields the following methods may be used to show / hide fields based on the display context:

    showOnIndex
    showOnDetail
    showOnCreating
    showOnUpdating
    showOnPreview
    showWhenPeeking
    hideFromIndex
    hideFromDetail
    hideWhenCreating
    hideWhenUpdating
    onlyOnIndex
    onlyOnDetail
    onlyOnForms
    exceptOnForms

For more details please refer to related Laravel Nova documentation page.

Some example screenshots:

Permission Group on Form page Permission Group on Detail page Permission Group on Index page


2023