Pluginify

Masuk Daftar
Home > Blog > Laravel > Filament User Management di Laravel: Mengelola User, Role, dan Permission

Filament User Management di Laravel: Mengelola User, Role, dan Permission

Filament User Management di Laravel: Mengelola User, Role, dan Permission

Komponen penting terakhir dalam rangkaian dasar Filament adalah Filament User Management, yaitu fitur yang mengatur data user, role, permission, dan akses terhadap admin panel. Pada aplikasi modern, user management bukan sekadar menyimpan akun, tetapi juga mengatur siapa yang berhak mengakses panel tertentu, fitur tertentu, hingga resource tertentu. Filament memberikan kemudahan integrasi dengan sistem role & permission seperti Spatie Permission, sehingga developer dapat membangun sistem admin yang aman dan profesional.


User Dasar pada Filament

Secara default, Filament menggunakan model User dari Laravel. Ketika pertama kali membuat user melalui perintah:

php artisan make:filament-user

User akan disimpan di tabel users dengan field yang sudah kompatibel untuk login admin.

Setelah login sukses, user dapat mengakses admin panel sesuai konfigurasi panel dan guard.


Restrict Akses ke Panel

Jika aplikasi memiliki user non-admin, maka hanya user tertentu yang boleh mengakses Filament Panel.

Filament menyediakan method canAccessPanel() pada model User:

public function canAccessPanel(): bool
{
    return $this->is_admin;
}

Contoh lain menggunakan role:

public function canAccessPanel(): bool
{
    return $this->hasRole('admin');
}

Dengan ini, hanya user admin yang dapat masuk ke panel.


Integrasi Role dan Permission dengan Spatie

Untuk kebutuhan yang lebih granular, Filament sangat kompatibel dengan package Spatie Laravel Permission.

1. Install Spatie Permission

composer require spatie/laravel-permission

Lalu migrasi:

php artisan migrate

2. Tambahkan Trait ke Model User

Pada app/Models/User.php:

use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use HasRoles;
}

Setelah itu, sistem role & permission siap digunakan.


Plugin Filament untuk Role & Permission

Daripada membuat manajemen role manual, kamu bisa gunakan plugin:

composer require filament/spatie-laravel-permission-plugin

Plugin ini menyediakan:

✔ CRUD Role

✔ CRUD Permission

✔ Assign Role ke User

✔ Assign Permission ke Role

✔ Filtering Navigation berdasarkan Role

Sangat membantu pada aplikasi enterprise-level.


Restrict Resource Berdasarkan Role

Kadang kamu ingin hanya role tertentu yang boleh membuka resource tertentu.

Contoh pada ProductResource:

public static function canViewAny(User $user): bool
{
    return $user->hasRole('manager');
}

Metode lain seperti:

  • canCreate()
  • canEdit()
  • canDelete()

juga tersedia dan dapat di-overwrite.

Contoh:

public static function canDelete(User $user): bool
{
    return $user->hasPermissionTo('delete products');
}

Dengan ini, user tanpa permission tidak akan melihat tombol Delete.


Restrict Navigation Berdasarkan Role

Jika menggunakan Spatie Permission Plugin, resource navigasi otomatis disesuaikan.

Namun kamu juga bisa manual:

public static function shouldRegisterNavigation(User $user): bool
{
    return $user->hasRole('admin');
}

Dengan ini, user non-admin tidak melihat menu tersebut.


Membuat Resource User Management Sendiri

Jika kamu ingin mengatur user dalam panel, kamu bisa membuat resource custom:

php artisan make:filament-resource UserResource --model=User

Lalu atur Form dan Table:

Form:

public static function form(Form $form): Form
{
    return $form
        ->schema([
            TextInput::make('name')->required(),
            TextInput::make('email')->email()->required(),
            TextInput::make('password')
                ->password()
                ->dehydrateStateUsing(fn ($state) => bcrypt($state))
                ->required(fn ($context) => $context === 'create'),
        ]);
}

Table:

public static function table(Table $table): Table
{
    return $table
        ->columns([
            TextColumn::make('name'),
            TextColumn::make('email'),
            TextColumn::make('created_at')->dateTime(),
        ]);
}

Dengan ini kamu sudah memiliki CRUD User lengkap.


Best Practice Filament User Management

Untuk aplikasi yang aman, gunakan prinsip berikut:

✔ Gunakan permission granular

✔ Gunakan role-based panel access

✔ Jangan tampilkan action jika tidak berhak

✔ Hash password di Form Filament

✔ Gunakan audit log untuk tracking perubahan

✔ Gunakan 2FA untuk admin level tinggi

✔ Lindungi route panel dengan middleware tambahan jika perlu

Dengan best practice ini, panel admin jadi lebih aman dan scalable.


Kesimpulan

Filament User Management memungkinkan developer untuk mengelola user, role, permission, serta akses panel dengan sangat fleksibel. Dengan integrasi kuat ke Laravel dan Spatie Permission, Filament membantu developer membangun sistem admin berbasis role yang aman dan enterprise-ready. Mulai dari login, CRUD user, navigasi berbasis role, hingga permission granular dapat diimplementasikan tanpa usaha besar.

Pluginify
Pluginify