Spatie Permission in Laravel 8 VILT app (Part 1)

Steps to setup Spatie Permission in Laravel app:

composer require spatie/laravel-permission

This is optional step. Put following class in providers array of your config/app.php file:

'providers' => 
[ 
   // ... 
   Spatie\Permission\PermissionServiceProvider::class, 
];

Now run the following command to export files from vendor folder:

php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"

Run the migration:

php artisan migrate

Finally, add the Spatie\Permission\Traits\HasRoles trait to your User model by modifying app/Models/User.php file as follows:

// ...
use Spatie\Permission\Traits\HasRoles; 

class User extends Authenticatable { 
    use HasRoles; 
    // ... 
}

Now you can start using Spatie Permission. As a test, add a new file database/seeders/PermissionsDemoSeeder.php as follows (copied from official documentation);

<?php
namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
use Spatie\Permission\PermissionRegistrar;

class PermissionsDemoSeeder extends Seeder
{
    public function run()
    {
        app()[PermissionRegistrar::class]->forgetCachedPermissions();

        Permission::create(['name' => 'edit articles']);
        Permission::create(['name' => 'delete articles']);
        Permission::create(['name' => 'publish articles']);
        Permission::create(['name' => 'unpublish articles']);

        $role1 = Role::create(['name' => 'writer']);
        $role1->givePermissionTo('edit articles');
        $role1->givePermissionTo('delete articles');

        $role2 = Role::create(['name' => 'admin']);
        $role2->givePermissionTo('publish articles');
        $role2->givePermissionTo('unpublish articles');

        $role3 = Role::create(['name' => 'super-admin']);

        $user = \App\Models\User::factory()->create([
            'name' => 'Example User',
            'email' => 'test@example.com',
        ]);
        $user->assignRole($role1);

        $user = \App\Models\User::factory()->create([
            'name' => 'Example Admin User',
            'email' => 'admin@example.com',
        ]);
        $user->assignRole($role2);

        $user = \App\Models\User::factory()->create([
            'name' => 'Example Super-Admin User',
            'email' => 'superadmin@example.com',
        ]);
        $user->assignRole($role3);
    }
}

Now migrate and seed by entering following command;

php artisan db:seed PermissionsDemoSeeder

In next part of this tutorial, we’ll learn how to use Spatie Permission in Laravel app.

Leave a Comment