Cara Membuat dan Menggunakan Middleware di Laravel (Contoh Cek Role)

Pernah membuat halaman dashboard yang seharusnya hanya bisa diakses admin, tapi ternyata siapa pun yang tahu URL-nya bisa masuk? Di sinilah middleware berperan. Middleware adalah "...

Cara Membuat dan Menggunakan Middleware di Laravel (Contoh Cek Role)

Pernah membuat halaman dashboard yang seharusnya hanya bisa diakses admin, tapi ternyata siapa pun yang tahu URL-nya bisa masuk? Di sinilah middleware berperan. Middleware adalah "lapisan penyaring" yang memeriksa setiap request sebelum sampai ke controller. Di artikel ini kamu akan belajar cara kerja middleware di Laravel dan membuat middleware sendiri untuk mengecek role pengguna โ€” lengkap dengan kode.

Apa Itu Middleware?

Analoginya seperti satpam di pintu gedung. Sebelum tamu masuk ke ruangan (controller), satpam (middleware) memeriksa dulu: apakah punya kartu akses? Sudah login? Punya izin? Kalau lolos, tamu dipersilakan masuk. Kalau tidak, diarahkan keluar (redirect) atau ditolak.

Setiap request di Laravel melewati rangkaian middleware sebelum mencapai logika utama. Contoh middleware bawaan Laravel: auth (memastikan user sudah login) dan throttle (membatasi jumlah request).

Cara Membuat Middleware

Gunakan perintah Artisan berikut:

php artisan make:middleware CheckRole

Perintah ini membuat file app/Http/Middleware/CheckRole.php. Isi method handle() adalah tempat logika pemeriksaan diletakkan:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class CheckRole
{
    public function handle(Request $request, Closure $next, string $role)
    {
        // Cek apakah user login dan role-nya sesuai
        if (! $request->user() || $request->user()->role !== $role) {
            abort(403, 'Anda tidak punya akses ke halaman ini.');
        }

        // Lolos pemeriksaan, lanjutkan request ke tujuan
        return $next($request);
    }
}

Perhatikan parameter ketiga $role โ€” ini memungkinkan kita mengirim nilai dinamis dari route (misalnya "admin" atau "editor").

Mendaftarkan Middleware

Agar bisa dipanggil lewat nama pendek, daftarkan alias-nya. Di Laravel 11, buka bootstrap/app.php:

->withMiddleware(function (Middleware $middleware) {
    $middleware->alias([
        'role' => \App\Http\Middleware\CheckRole::class,
    ]);
})

Pada Laravel 10 ke bawah, alias didaftarkan di array $routeMiddleware dalam app/Http/Kernel.php.

Menerapkan Middleware ke Route

Sekarang lindungi route dengan mengirim parameter role:

// Hanya admin yang boleh masuk
Route::get('/dashboard', [DashboardController::class, 'index'])
    ->middleware('role:admin');

// Beberapa route sekaligus
Route::middleware('role:admin')->group(function () {
    Route::get('/users', [UserController::class, 'index']);
    Route::get('/settings', [SettingController::class, 'index']);
});

Tanda titik dua (role:admin) adalah cara mengirim parameter ke middleware. Nilai admin akan masuk ke variabel $role tadi.

Middleware "Before" vs "After"

Middleware bisa berjalan sebelum atau sesudah request diproses:

  • Before โ€” logika dijalankan sebelum return $next($request). Cocok untuk pemeriksaan akses (seperti contoh di atas).
  • After โ€” logika dijalankan setelahnya, memakai hasil response. Cocok untuk mencatat log atau menambah header.
public function handle(Request $request, Closure $next)
{
    $response = $next($request);      // proses dulu
    $response->header('X-App', 'MyApp'); // baru modifikasi response
    return $response;
}

Pertanyaan yang Sering Diajukan (FAQ)

Apa bedanya middleware global dan route middleware?

Middleware global berjalan pada semua request (misalnya penanganan CORS), sedangkan route middleware hanya berjalan pada route tertentu yang kamu tentukan.

Bisakah satu route punya banyak middleware?

Bisa. Gunakan array: ->middleware(['auth', 'role:admin']). Middleware dijalankan berurutan sesuai penulisannya.

Kenapa middleware saya tidak jalan?

Cek tiga hal: alias sudah didaftarkan, nama alias di route benar, dan jalankan php artisan optimize:clear karena route sering ter-cache.

Kesimpulan

Middleware adalah cara Laravel menyaring request sebelum mencapai controller โ€” ideal untuk otentikasi, pengecekan role, logging, dan pembatasan akses. Dengan satu middleware CheckRole, kamu bisa mengamankan seluruh area admin secara rapi tanpa mengulang kode pengecekan di tiap controller.

Selanjutnya, pelajari Cara Membuat Login dan Register di Laravel dengan Breeze untuk melengkapi sistem otentikasimu, dan Cara Mengatasi Error "Route [login] not defined" yang sering muncul saat memakai middleware auth.

middleware laravel cara membuat middleware cek role laravel middleware admin laravel filter request laravel
Yudhi
Ditulis oleh

Yudhi

Web Developer

Web developer yang sehari-hari berkutat dengan PHP, Laravel, JavaScript, dan MySQL. Terbiasa membangun aplikasi web dari nol โ€” merancang database, menulis fitur, memburu bug, hingga deploy ke server โ€” lalu menuangkan solusi dan tutorialnya di DhieCoderWeb agar lebih mudah diikuti developer lain.

Bagikan artikel
Kembali

Komentar (0)

Punya pertanyaan atau tambahan? Tulis di bawah โ€” tak perlu login.

Membalas komentarโ€ฆ batal

Belum ada komentar. Jadilah yang pertama!

๐Ÿš€ Partner Recommendation

Butuh Source Code & Aplikasi Premium?

Download aplikasi Laravel, POS, Sekolah, Klinik, ERP, dan source code siap pakai di GudangCode.

GudangCode
  • โœ” Source Code Premium
  • โœ” Sistem Siap Pakai
  • โœ” Lifetime Update
  • โœ” Membership Lifetime
  • โœ” Update Aplikasi Harian
Daftar Membership โ†’