Middleware adalah lapisan yang menyaring request sebelum masuk ke controller โ cocok untuk mengecek apakah user sudah login, punya role tertentu, atau request memenuhi syarat. Artikel ini menunjukkan cara membuat middleware sendiri, dengan contoh cek role admin.
Konsep Middleware
Bayangkan middleware sebagai "penjaga pintu". Setiap request harus melewatinya dulu. Jika lolos, request diteruskan; jika tidak, request ditolak atau dialihkan.
Langkah 1: Membuat Middleware
php artisan make:middleware CheckAdmin
File baru muncul di app/Http/Middleware/CheckAdmin.php. Isi logikanya di method handle():
public function handle($request, Closure $next)
{
if (auth()->check() && auth()->user()->role === 'admin') {
return $next($request); // lolos, lanjutkan
}
abort(403, 'Akses ditolak'); // tolak
}
Langkah 2: Mendaftarkan Middleware
Daftarkan alias di app/Http/Kernel.php pada array $middlewareAliases (atau $routeMiddleware di versi lama):
'admin' => \App\Http\Middleware\CheckAdmin::class,
Langkah 3: Memakainya di Route
Terapkan middleware ke route atau grup route:
Route::get('/dashboard', [AdminController::class, 'index'])
->middleware('admin');
// atau untuk beberapa route sekaligus
Route::middleware(['auth', 'admin'])->group(function () {
Route::get('/admin/users', [UserController::class, 'index']);
Route::get('/admin/settings', [SettingController::class, 'index']);
});
Middleware dengan Parameter
Middleware bisa menerima parameter, misalnya untuk mengecek beberapa role:
public function handle($request, Closure $next, $role)
{
if (auth()->user()->role !== $role) {
abort(403);
}
return $next($request);
}
Memakainya:
Route::get('/editor')->middleware('role:editor');
Middleware Global vs Route
Middleware bisa diterapkan secara global (semua request) atau per-route. Untuk pengecekan seperti role, gunakan per-route agar tidak membebani seluruh aplikasi.
Kesimpulan
Middleware membuat logika penyaringan request jadi rapi dan bisa dipakai ulang: buat dengan make:middleware, daftarkan alias di Kernel, lalu pasang di route. Pola ini ideal untuk otorisasi berbasis role. Untuk membangun sistem login-nya terlebih dulu, lihat panduan kami tentang membuat login dan register dengan Laravel Breeze.