Blog by Fadil Rumasoreng

Saya menulis tentang pengalaman saya membangun aplikasi, eksperimen teknologi, dan ide-ide seputar web development. Semua ini saya bagikan atau saya tulis murni dari pengalaman yang saya dapatkan ketika mengembangkan perangkat lunak.

Mengapa Perlu Memikirkan Multi-Role di Laravel?

CNFadil RumasorengΒ· 24 Sep 2025Β· 0
Mengapa Perlu Memikirkan Multi-Role di Laravel?

Ketika membangun aplikasi dengan Laravel, sering kali kita menghadapi kebutuhan multi-role authentication. Misalnya:

  • User biasa yang hanya menggunakan aplikasi.

  • Author atau kontributor yang punya akses lebih (menulis artikel, mengelola konten).

Pertanyaan yang muncul adalah:

πŸ‘‰ Apakah lebih baik memisahkan controller untuk setiap role, atau cukup menggunakan satu controller dengan role flag?

Artikel ini membahas praktik terbaik, struktur, dan contoh kode multi-role registration di Laravel.


Kapan Harus Memisahkan Controller?

Ada beberapa skenario umum yang perlu dipertimbangkan:

  • Tabel berbeda β†’ Jika user dan author disimpan di tabel yang berbeda, maka sebaiknya controller juga dipisah.

  • Guard berbeda β†’ Misalnya user dan author. Tiap guard butuh controller sendiri.

  • Validasi & field input berbeda β†’ Author biasanya punya bio atau pen name, sedangkan user tidak.

  • Satu tabel dengan role flag β†’ Jika hanya ada kolom role dalam tabel users, maka satu controller cukup.

πŸ“Œ Intinya: Semakin kompleks perbedaan role, semakin kuat alasan untuk memisahkan controller.


Contoh Struktur Folder & Route Laravel

Jika memilih memisahkan controller:

app/
β”œβ”€ Http/
β”‚  β”œβ”€ Controllers/
β”‚  β”‚  β”œβ”€ Auth/
β”‚  β”‚  β”‚  β”œβ”€ RegisteredUserController.php
β”‚  β”‚  β”‚  β”œβ”€ RegisteredAuthorController.php

Route

Route::post('/register/user', [RegisteredUserController::class, 'store']);
Route::post('/register/author', [RegisteredAuthorController::class, 'store']);

Dengan cara ini, proses registrasi lebih terstruktur dan mudah di-maintain.


Satu Tabel, Role Hanya Flag

Jika menggunakan satu tabel users dan hanya menambahkan kolom role, maka satu controller sudah cukup:

public function store(Request $request)
{
    $request->validate([
        'name' => 'required',
        'email' => 'required|email|unique:users',
        'password' => ['required', 'confirmed', Rules\Password::defaults()],
    ]);

    User::create([
        'name' => $request->name,
        'email' => $request->email,
        'password' => Hash::make($request->password),
        'role' => $request->input('role', 'user'),
    ]);

    // Login atau redirect sesuai role
}

Pendekatan ini cocok untuk aplikasi sederhana dengan role minimal.


Multi-Guard Authentication di Laravel

Jika menggunakan guard berbeda (user, author), maka kita wajib memisahkan controller.

config/auth.php

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'author' => [
        'driver' => 'session',
        'provider' => 'authors',
    ],
],
'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],
    'authors' => [
        'driver' => 'eloquent',
        'model' => App\Models\Author::class,
    ],
],

Alasannya:

  • Login dan register form berbeda.

  • Middleware juga berbeda (auth:web vs auth:author).

  • Flow redirect setelah login bisa berbeda (dashboard user vs editor author).


Contoh Controller Laravel untuk Multi-Role

RegisteredUserController

public function store(RegisterUserRequest $request)
{
    User::create([
        'name' => $request->name,
        'email' => $request->email,
        'password' => Hash::make($request->password),
        'role' => 'user',
    ]);
}

RegisteredAuthorController

public function store(RegisterAuthorRequest $request)
{
    Author::create([
        'name' => $request->name,
        'email' => $request->email,
        'bio' => $request->bio,
        'password' => Hash::make($request->password),
    ]);
}

Rekomendasi Praktik Terbaik

Skema RegistrasiPraktik TerbaikMulti-table, multi-guardPisahkan controller & guardRole hanya flag di tabel usersBisa satu controllerValidasi berbedaPisahkan controller agar maintainableRegistrasi dari form berbedaPisahkan route & controllerMenggunakan Jetstream/FortifyIkuti struktur bawaan atau extend


Kesimpulan

  • Jika aplikasi sederhana β†’ satu controller cukup (role flag).

  • Jika aplikasi kompleks (multi-table, multi-guard, validasi berbeda) β†’ pisahkan controller.

  • Laravel sudah fleksibel mendukung keduanya, tinggal sesuaikan kebutuhan.

Dengan memahami skenario ini, developer bisa memilih desain Laravel multi-role registration yang lebih efisien, scalable, dan mudah di-maintain.


Next Step

  • Tambahkan service layer untuk memisahkan logic dari controller.

  • Buat unit test untuk setiap proses registrasi.

  • Sesuaikan redirect per role (user β†’ dashboard, author β†’ editor).


πŸ‘‰ Artikel ini bisa dioptimalkan dengan keyword turunan seperti:

  • Laravel multi-auth

  • Laravel multiple role authentication

  • Laravel register user and author

  • Laravel guards authentication

Komentar

Belum ada komentar.