Banner - Cara Mengatasi Error 403 Setelah Login di Laravel Filament

Cara Mengatasi Error 403 Setelah Login di Laravel Filament

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.

Pindah Hosting ke Rumahweb Gratis

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:

  1. Buka app/Models/User.php.
  2. Implementasikan FilamentUser.
  3. Tambahkan method canAccessPanel().
  4. Tentukan user mana yang boleh mengakses panel.
  5. 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.

Bermanfaatkah Artikel Ini?

Klik bintang 5 untuk rating!

Rating rata-rata 0 / 5. Vote count: 0

Belum ada vote hingga saat ini!

Kami mohon maaf artikel ini kurang berguna untuk Anda!

Mari kita perbaiki artikel ini!

Beri tahu kami bagaimana kami dapat meningkatkan artikel ini?

Abdurrahman Al Aufa