
Pendahuluan
Bayangin lagi ngerjain fitur sederhana, tapi tiba-tiba bos minta pembatasan akses yang beda-beda tiap role. Biasanya kita langsung kepikiran nulis logic if-else di dalam controller, padahal cara itu bikin kode berantakan banget pas project makin gede. Middleware custom di Laravel itu penyelamat buat jaga kebersihan kode, biar controller kamu fokus ke logic bisnis, bukan urusan siapa yang boleh masuk.
Tips & Best Practices
- Di banyak project, biasanya saya mulai dari membuat Middleware yang spesifik per role. Jangan pernah bikin satu middleware raksasa yang ngecek semua kondisi, karena bakal ribet pas nanti nambah role baru.
- Selalu gunakan form request atau policy kalau logic aksesnya bergantung pada data model, jangan cuma ngandelin middleware buat semuanya.
- Saya terbiasa naruh logic pengecekan di dalam 'Gate' atau 'Policy' agar middleware cuma jadi pintu masuk yang simpel, bukan tempat nulis aturan bisnis yang kompleks.
Contoh Kode
Biasanya saya buat middleware lewat artisan: php artisan make:middleware EnsureUserHasRole. Berikut cara saya nulis logic-nya:
public function handle($request, Closure $next, $role)
{
if (!$request->user() || !$request->user()->hasRole($role)) {
return redirect('home')->with('error', 'Akses ditolak!');
}
return $next($request);
}Di Kernel.php atau bootstrap/app.php, saya daftarkan aliasnya biar enak dipanggil di route: 'role' => \App\Http\Middleware\EnsureUserHasRole::class.
Variasi Implementasi
Kalau role-nya cuma dua, mungkin cukup pakai auth bawaan. Tapi buat skala enterprise, saya lebih milih integrasi sama library seperti Spatie Permission dibanding bikin sendiri dari nol. Kenapa? Karena edge cases kayak 'user punya banyak role' itu sering bikin pusing kalau di-handle manual.
Kesalahan Umum
- Lupa nge-register middleware di kernel, ini klasik banget dan sering bikin frustrasi kenapa route gak jalan.
- Naruh terlalu banyak logic di middleware sampai-sampai susah di-debug pas ada user yang 'nyangkut' aksesnya.
- Gak nanganin kondisi user yang nggak login (guest) sebelum ngecek role, hasilnya error object null.
- Hardcode string nama role langsung di dalam middleware padahal harusnya bisa dibuat dinamis.
- Terlalu bergantung sama redirect ke home, padahal kadang user lebih butuh response 403 Forbidden buat API.
Ringkasan
Intinya, middleware itu kayak satpam di pintu depan aplikasi kamu. Kalau kodenya rapi dan terukur, kamu nggak perlu bolak-balik ngecek controller tiap ada perubahan aturan akses. Cukup kelola di middleware, dan sisanya tinggal jalan sesuai alur bisnis yang kamu bangun.
Komentar
Posting Komentar