Setup User Authentication
Using Laravel Breeze:
composer require laravel/breeze --dev
php artisan breeze:install # always make sure to support dark mode
php artisan migrate
Setup User Roles
Use Laravel Permissions with a database seeder.
php artisan make:seeder RoleAndPermissionSeeder
Here’s an example of the one for my personal site.
<?php
namespace Database\Seeders;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
class RoleAndPermissionSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
Permission::create(['name' => 'create-users']);
Permission::create(['name' => 'edit-users']);
Permission::create(['name' => 'delete-users']);
Permission::create(['name' => 'create-blog-posts']);
Permission::create(['name' => 'edit-blog-posts']);
Permission::create(['name' => 'delete-blog-posts']);
Permission::create(['name' => 'create-comic-posts']);
Permission::create(['name' => 'edit-comic-posts']);
Permission::create(['name' => 'delete-comic-posts']);
Permission::create(['name' => 'create-comment-posts']);
Permission::create(['name' => 'edit-comment-posts']);
Permission::create(['name' => 'delete-comment-posts']);
$adminRole = Role::create(['name' => 'Admin']);
$editorRole = Role::create(['name' => 'Editor']);
$guestRole = Role::create(['name' => 'Guest']);
$adminRole->givePermissionTo([
'create-users',
'edit-users',
'delete-users',
// blog
'create-blog-posts',
'edit-blog-posts',
'delete-blog-posts',
// comics
'create-comic-posts',
'edit-comic-posts',
'delete-comic-posts',
'create-comment-posts',
'edit-comment-posts',
'delete-comment-posts',
]);
$editorRole->givePermissionTo([
'create-blog-posts',
'edit-blog-posts',
'delete-blog-posts',
// comics
'create-comic-posts',
'edit-comic-posts',
'delete-comic-posts',
'create-comment-posts',
'edit-comment-posts',
'delete-comment-posts',
]);
$guestRole->givePermissionTo([
'create-comment-posts',
'edit-comment-posts',
'delete-comment-posts',
]);
}
}