All Projects → insenseanalytics → Laravel Nova Permission

insenseanalytics / Laravel Nova Permission

Licence: mit
A Laravel Nova tool for the Spatie Permission package

Projects that are alternatives of or similar to Laravel Nova Permission

nova-permissions
Add Permissions based authorization for your Nova installation via User-based Roles and Permissions. Roles are defined in the database whereas Permissions are defined in the code base.
Stars: ✭ 115 (+94.92%)
Mutual labels:  permissions, nova
Laravel Nova Lang
🌌 Language files for Laravel Nova translated into 40+ languages. Feel free to submit your language or update an existing one!
Stars: ✭ 275 (+366.1%)
Mutual labels:  laravel, nova
Laravel Nova Excel
🚀 Supercharged Excel exports for Laravel Nova Resources
Stars: ✭ 259 (+338.98%)
Mutual labels:  laravel, nova
Skeleton Nova Tool
A skeleton repository for Spatie's Nova Packages
Stars: ✭ 191 (+223.73%)
Mutual labels:  laravel, nova
Nova Laravel Update Card
Check if you're running the latest Laravel version right from your Nova dashboard.
Stars: ✭ 34 (-42.37%)
Mutual labels:  laravel, nova
Nova Tags Field
A tags field to use in your Nova apps
Stars: ✭ 204 (+245.76%)
Mutual labels:  laravel, nova
Nova Tabs
Laravel Nova Tabs Package
Stars: ✭ 265 (+349.15%)
Mutual labels:  laravel, nova
Laravel Nova Nested Form
This package allows you to include your nested relationships' forms into a parent form.
Stars: ✭ 169 (+186.44%)
Mutual labels:  laravel, nova
Shinobi
👺 Simple and light-weight role-based permissions system for Laravel's built in Auth system.
Stars: ✭ 349 (+491.53%)
Mutual labels:  laravel, permissions
Scout Extended
Scout Extended: The Full Power of Algolia in Laravel
Stars: ✭ 330 (+459.32%)
Mutual labels:  laravel, nova
Nova Filemanager
A Filemanager tool for Laravel Nova
Stars: ✭ 189 (+220.34%)
Mutual labels:  laravel, nova
Nova Mega Filter
Allows you to control the columns and filters shown on any Nova resource index
Stars: ✭ 49 (-16.95%)
Mutual labels:  laravel, nova
Vue Gates
🔒 A Vue.js & Nuxt.js plugin that allows you to use roles and permissions in your components or DOM elements, also compatible as middleware and methods.
Stars: ✭ 184 (+211.86%)
Mutual labels:  laravel, permissions
Bouncer
Eloquent roles and abilities.
Stars: ✭ 2,763 (+4583.05%)
Mutual labels:  laravel, permissions
Nova Impersonate
A Laravel Nova field allows you to authenticate as your users.
Stars: ✭ 182 (+208.47%)
Mutual labels:  laravel, nova
Nova Backup Tool
A Laravel Nova tool to backup your app
Stars: ✭ 260 (+340.68%)
Mutual labels:  laravel, nova
Laravel Nova Localizations
🌎 Localization files for Laravel Nova
Stars: ✭ 161 (+172.88%)
Mutual labels:  laravel, nova
Lock Laravel
This package is a Laravel 5 driver for Lock
Stars: ✭ 161 (+172.88%)
Mutual labels:  laravel, permissions
Nova Permission
A Laravel Nova tool for Spatie's laravel-permission library
Stars: ✭ 294 (+398.31%)
Mutual labels:  laravel, nova
Nova Time Field
Laravel Nova Time Field
Stars: ✭ 45 (-23.73%)
Mutual labels:  laravel, nova

A Laravel Nova tool for the Spatie Permission package

License Latest Stable Version Scrutinizer Code Quality Total Downloads

This Nova tool lets you:

  • manage roles and permissions on the Nova dashboard
  • use permissions based authorization for Nova resources

Screenshots

screenshot of the backup tool

Requirements & Dependencies

There are no PHP dependencies except the Laravel Nova package and the Spatie Permission package.

Installation

You can install this tool into a Laravel app that uses Nova via composer:

composer require insenseanalytics/laravel-nova-permission

Next, if you do not have package discovery enabled, you need to register the provider in the config/app.php file.

'providers' => [
    ...,
    Insenseanalytics\LaravelNovaPermission\NovaPermissionServiceProvider::class,
]

Next, you must register the tool with Nova. This is typically done in the tools method of the NovaServiceProvider.

// in app/Providers/NovaServiceProvider.php

public function tools()
{
    return [
        // ...
        \Insenseanalytics\LaravelNovaPermission\LaravelNovaPermission::make(),
    ];
}

Next, add MorphToMany fields to your app/Nova/User resource:

use Laravel\Nova\Fields\MorphToMany;

public function fields(Request $request)
{
    return [
        // ...
        MorphToMany::make('Roles', 'roles', \Insenseanalytics\LaravelNovaPermission\Role::class),
        MorphToMany::make('Permissions', 'permissions', \Insenseanalytics\LaravelNovaPermission\Permission::class),
    ];
}

Finally, add the ForgetCachedPermissions class to your config/nova.php middleware like so:

// in config/nova.php
'middleware' => [
	'web',
	Authenticate::class,
	DispatchServingNovaEvent::class,
	BootTools::class,
	Authorize::class,
	\Insenseanalytics\LaravelNovaPermission\ForgetCachedPermissions::class,
],

Localization

You can use the artisan command line tool to publish localization files:

php artisan vendor:publish --provider="Insenseanalytics\LaravelNovaPermission\NovaPermissionServiceProvider"

Using Custom Role/Permission Resource Classes

If you want to use custom resource classes you can define them when you register a tool:

// in app/Providers/NovaServiceProvider.php

public function tools()
{
    return [
        // ...
        \Insenseanalytics\LaravelNovaPermission\LaravelNovaPermission::make()
            ->roleResource(CustomRole::class)
            ->permissionResource(CustomPermission::class),
    ];
}

Permissions Based Authorization for Nova Resources

By default, Laravel Nova uses Policy based authorization for Nova resources. If you are using the Spatie Permission library, it is very likely that you would want to swap this out to permission based authorization without the need to define Authorization policies.

To do so, you can use the PermissionsBasedAuthTrait and define a permissionsForAbilities static array property in your Nova resource class like so:

// in app/Nova/YourNovaResource.php

class YourNovaResource extends Resource
{
    use \Insenseanalytics\LaravelNovaPermission\PermissionsBasedAuthTrait;

    public static $permissionsForAbilities = [
      'all' => 'manage products',
    ];
}

The example above means that all actions on this resource can be performed by users who have the "manage products" permission. You can also define separate permissions for each action like so:

    public static $permissionsForAbilities = [
      'viewAny' => 'view products',
      'view' => 'view products',
      'create' => 'create products',
      'update' => 'update products',
      'delete' => 'delete products',
      'restore' => 'restore products',
      'forceDelete' => 'forceDelete products',
      'addAttribute' => 'add product attributes',
      'attachAttribute' => 'attach product attributes',
      'detachAttribute' => 'detach product attributes',
    ];

Relationships

To allow your users to specify a relationship on your model, you will need to add another permission on the Model. For example, if your Product belongs to User, add the following permission on app/Nova/User.php. :

    public static $permissionsForAbilities = [
      'addProduct' => 'add user on products'
    ];

Contributing

Contributions are welcome and will be fully credited as long as you use PSR-2, explain the issue/feature that you want to solve/add and back your code up with tests. Happy coding!

License

The MIT License (MIT). Please see License File for more information.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].