Mengalami Error 403 setelah login ke aplikasi berbasis Laravel Filament? Masalah ini cukup sering dialami developer, terutama setelah aplikasi dipindahkan dari lingkungan localhost ke server production. Menariknya, proses login biasanya berjalan normal, tetapi pengguna justru diarahkan ke halaman 403 Forbidden saat mencoba mengakses panel admin.
Kondisi tersebut sebenarnya bukan disebabkan oleh bug pada Laravel Filament, melainkan mekanisme keamanan bawaan yang mengatur siapa saja yang berhak mengakses panel admin. Jika konfigurasi otorisasi belum sesuai, Filament akan otomatis menolak akses meskipun proses login berhasil dilakukan.
Pada artikel ini, Anda akan mempelajari penyebab munculnya Error 403 setelah login di Laravel Filament beserta langkah-langkah untuk mengatasinya sehingga panel admin dapat diakses kembali dengan normal.
Penyebab Error 403 Setelah Login di Filament
Secara default, semua user dapat mengakses Filament ketika aplikasi berjalan di environment local (APP_ENV=local).
Namun ketika aplikasi berjalan di production, Filament akan melakukan pengecekan melalui method:
canAccessPanel()Apabila method tersebut mengembalikan nilai false, maka Filament akan langsung menampilkan halaman 403 Forbidden.
Hal ini merupakan fitur keamanan bawaan Filament untuk mencegah seluruh user mengakses dashboard admin secara sembarangan.
Mengatasi Error 403 Setelah Login di Laravel Filament
Sebelum melakukan perbaikan, pastikan error yang Anda alami memiliki kondisi seperti berikut:
- Proses login berhasil tanpa muncul pesan “Email atau Password salah”.
- Pengguna berhasil melakukan autentikasi.
- Setelah login, pengguna langsung diarahkan ke halaman 403 Forbidden saat mengakses panel admin Filament.
Apabila kondisi yang Anda alami sesuai dengan daftar di atas, silakan ikuti langkah-langkah berikut untuk mengatasi Error 403 setelah login di Laravel Filament.
Step 1: Implementasikan Interface FilamentUser
Buka file: app/Models/User.php
Tambahkan:
use Filament\Models\Contracts\FilamentUser;
use Filament\Panel;Kemudian ubah model User menjadi:
class User extends Authenticatable implements FilamentUser
{
//
}Sehingga menjadi:
<?php
namespace App\Models;
use Filament\Models\Contracts\FilamentUser;
use Filament\Panel;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements FilamentUser
{
//
}Step 2: Tambahkan Method canAccessPanel()
Di dalam model User, tambahkan:
public function canAccessPanel(Panel $panel): bool
{
return true;
}Sehingga menjadi:
class User extends Authenticatable implements FilamentUser
{
public function canAccessPanel(Panel $panel): bool
{
return true;
}
}Penjelasan
Method canAccessPanel() digunakan oleh Filament sebagai mekanisme authorization untuk menentukan apakah pengguna yang telah berhasil melakukan autentikasi (login) diperbolehkan mengakses panel admin atau tidak. Setelah proses login berhasil, Filament akan memanggil method ini dan mengevaluasi nilai yang dikembalikan.
Apabila method mengembalikan nilai true, berarti pengguna dianggap memiliki izin untuk mengakses panel sehingga akan diarahkan ke dashboard Filament. Sebaliknya, jika method mengembalikan nilai false, Filament akan menolak akses pengguna meskipun proses login telah berhasil.
Dalam kondisi tersebut, pengguna akan diarahkan ke halaman 403 Forbidden, yang menandakan bahwa akun tersebut tidak memiliki hak akses ke panel admin.
Mengapa di Localhost Tidak Error?
Banyak developer bingung karena:
- localhost > normal
- production > 403
Hal ini karena Filament secara default mengizinkan seluruh user ketika aplikasi berjalan di environment local. Ketika berpindah ke production, Filament mengaktifkan pengecekan authorization pada panel.
Solusi yang Direkomendasikan untuk Production
Meskipun return statement return true; dapat mengatasi error, cara tersebut kurang aman untuk aplikasi production.
Sebaiknya batasi hanya user tertentu saja yang dapat mengakses dashboard admin.
Contoh menggunakan kolom is_admin:
public function canAccessPanel(Panel $panel): bool
{
return $this->is_admin;
}Contoh Menggunakan Role
Misalnya menggunakan package Spatie Permission:
public function canAccessPanel(Panel $panel): bool
{
return $this->hasRole('admin');
}Dengan demikian:
- user biasa > 403
- admin > dapat masuk dashboard
Contoh Berdasarkan Email
Sesuai dokumentasi Filament, akses juga dapat dibatasi berdasarkan domain email.
public function canAccessPanel(Panel $panel): bool
{
return str_ends_with($this->email, '@domainanda.com');
}Maka hanya email @domainanda.com yang dapat mengakses panel.
Contoh Menggunakan Verifikasi Atribut Email
public function canAccessPanel(Panel $panel): bool
{
return $this->hasVerifiedEmail();
}Atau digabungkan:
public function canAccessPanel(Panel $panel): bool
{
return $this->is_admin
&& $this->hasVerifiedEmail();
}Solusi Jika Menggunakan Multiple Panel
Misalnya memiliki:
- Admin Panel
- Customer Panel
Maka:
public function canAccessPanel(Panel $panel): bool
{
if ($panel->getId() === 'admin') {
return $this->is_admin;
}
return true;
}Artinya:
- panel admin hanya untuk admin;
- panel lainnya dapat diakses semua user.
Kesimpulan
Error 403 setelah login pada Laravel Filament hampir selalu disebabkan karena model User belum mengimplementasikan interface FilamentUser atau method canAccessPanel() mengembalikan nilai false.
Langkah penyelesaiannya adalah:
- Buka app/Models/User.php.
- Implementasikan FilamentUser.
- Tambahkan method canAccessPanel().
- Tentukan user mana yang boleh mengakses panel.
- Clear cache Laravel.
Dengan memahami mekanisme authorization bawaan Filament ini, Anda dapat menghindari error 403 sekaligus membuat dashboard admin menjadi lebih aman dan hanya dapat diakses oleh pengguna yang berwenang.


