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.