Pada tutorial kedua ini, kita akan belajar tentang authentikasi user. Di sini ada user admin, dan ada user public. Pada modul ini, secara umum ada 3 komponen berikut :

  1. Menggunakan Laravel Breeze untuk setup autentikasi dasar.
  2. Menambahkan middleware untuk membedakan akses admin dan user.
  3. Membuat halaman login dan dashboard terpisah untuk admin dan user.

Langkah 1: Menggunakan Laravel Breeze untuk Setup Autentikasi

Instal Laravel Breeze:

Laravel Breeze menyediakan scaffolding autentikasi yang sederhana, cepat, dan efisien. Untuk menginstalnya, jalankan perintah berikut:

composer require laravel/breeze --dev

Install dan Generate Scaffolding:

Setelah berhasil menginstal Laravel Breeze, jalankan perintah di bawah ini untuk membuat scaffolding autentikasi:

php artisan breeze:install

Kita akan menggunakan blade untuk stack nya. 

Jalankan Migrate:

Jalankan migrasi untuk membuat tabel users yang dibutuhkan oleh autentikasi.

php artisan migrate

Jalankan npm:

Jalankan perintah berikut untuk meng-compile assets yang dibutuhkan untuk tampilan autentikasi.

npm install && npm run dev

Langkah 2: Menambahkan Kolom Role di Tabel Users

Tambah Kolom role di Tabel users:

Buka file migration create_users_table.php dan tambahkan kolom role dengan nilai default user.

$table->string('role')->default('user'); // bisa user atau admin

Full code untuk file create_users_table.php sebagai berikut:

public function up(): void
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->string('role')->default('user'); // bisa user atau admin
            $table->rememberToken();
            $table->timestamps();
        });
    }

Migrasi Ulang Database:

Jalankan migrasi ulang agar kolom role ditambahkan:

php artisan migrate:fresh

Setup Seeder User dan Admin:

Tambahkan user dan admin di DatabaseSeeder.php untuk testing awal di file app\database\seeders\DatabaseSeeder.php

use App\Models\User;

User::create([
    'name' => 'Admin',
    'email' => 'admin@example.com',
    'password' => bcrypt('password'),
    'role' => 'admin',
]);

User::create([
    'name' => 'User',
    'email' => 'user@example.com',
    'password' => bcrypt('password'),
    'role' => 'user',
]);

Jalankan Seeder:

php artisan db:seed

Cek data di database, di tabel users, hasilnya seperti berikut:

Langkah 3: Menambahkan Middleware Role untuk Admin dan User

Buat Middleware Baru:

Jalankan perintah berikut untuk membuat middleware Admin.

php artisan make:middleware AdminMiddleware

Edit Middleware AdminMiddleware.php:

Buka file app/Http/Middleware/AdminMiddleware.php dan tambahkan logika berikut untuk membatasi akses hanya untuk admin.

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class AdminMiddleware
{
    public function handle(Request $request, Closure $next)
    {
        if (auth()->check() && auth()->user()->role === 'admin') {
            return $next($request);
        }

        return redirect('/dashboard')->with('error', 'Access denied.');
    }
}

Registrasikan Middleware:

Buka file app/Http/Kernel.php dan tambahkan middleware baru ke dalam array $routeMiddleware:

protected $middlewareAliases = [
    // Middleware lainnya
    'admin' => \App\Http\Middleware\AdminMiddleware::class,
];

Langkah 4: Setup Route dan Dashboard Khusus Admin dan User

Edit Route di web.php:

Tambahkan route admin/dashboard dan user/dashboard, dengan middleware yang sesuai.

use App\Http\Controllers\AdminController;
use App\Http\Controllers\UserController;

Route::get('/dashboard', [UserController::class, 'index'])->middleware(['auth', 'verified'])->name('dashboard');

Route::middleware(['auth', 'admin'])->group(function () {
    Route::get('/admin/dashboard', [AdminController::class, 'index'])->name('admin.dashboard');
});

Buat Controller Admin dan User:

Buat controller AdminController dan UserController dengan perintah:

php artisan make:controller AdminController 
php artisan make:controller UserController

Implementasi Method Dashboard di Controller:

UserController:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    public function index()
    {
        return view('user.dashboard');
    }
}

AdminController:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class AdminController extends Controller
{
    public function index()
    {
        return view('admin.dashboard');
    }
}

Edit file AuthenticatedSessionController.php 

Buka file AuthenticatedSessionController.php di dalam app/Http/Controllers/Auth/. Edit Method store:

public function store(LoginRequest $request): RedirectResponse
    {
        $request->validate([
            'email' => 'required|email',
            'password' => 'required',
        ]);

        if (Auth::attempt($request->only('email', 'password'))) {
            $request->session()->regenerate();

            // Cek role user dan arahkan ke halaman yang sesuai
            if (Auth::user()->role === 'admin') {
                return redirect()->intended('/admin/dashboard');
            }

            return redirect()->intended('/dashboard');
        }

        return back()->withErrors([
            'email' => 'The provided credentials do not match our records.',
        ]);
    }

Buat Halaman View untuk Admin dan User:

resources/views/admin/dashboard.blade.php:

Buat folder admin di dalam resources/views dan buat file dashboard.blade.php di dalamnya. isi code dashboard.blade.php sebagai berikut:

<h1>Welcome Admin!</h1>
<p>Ini adalah halaman dashboard khusus admin.</p>

resources/views/user/dashboard.blade.php:

Buat folder user di dalam resources/views dan buat file dashboard.blade.php di dalamnya.

<h1>Welcome User!</h1>
<p>Ini adalah halaman dashboard untuk user biasa.</p>

Langkah 5: Menambahkan Link Logout

Buat Tombol Logout di View:

Tambahkan link logout di layout.blade.php atau di setiap dashboard.

<form action="{{ route('logout') }}" method="POST"> @csrf <button type="submit">Logout</button> </form>

Cek Hasil Akhir

Silahkan coba buka http://localhost:8000/login, dan login sebagai admin, jika berhasil akan menghasilkan berikut:

Coba login sebagai user, dan pastikan user diarahkan ke /dashboard dan tidak dapat mengakses /admin/dashboard.

Dengan mengikuti langkah-langkah di atas, sekarang Anda telah menyelesaikan Modul Autentikasi Admin dan User dengan halaman dashboard terpisah sesuai dengan role.