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
userdanauthor. Tiap guard butuh controller sendiri.Validasi & field input berbeda β Author biasanya punya
bioataupen name, sedangkan user tidak.Satu tabel dengan role flag β Jika hanya ada kolom
roledalam tabelusers, 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:webvsauth: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.