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',
 
        ]);
 
    }
 
}