Saat membuat aplikasi berbasis website, sering kali kita perlu membedakan akses antara admin, pengguna biasa, hingga mungkin moderator. Di sinilah pentingnya menerapkan sistem multi level user di website. Dengan sistem ini, setiap pengguna bisa memiliki peran (role) yang berbeda dan hanya bisa mengakses fitur sesuai haknya.
Pada sesi belajar laravel bagian ke 20 ini, kita akan belajar cara membuat sistem roles akses pengguna berdasarkan peran masing-masing user.
Selain itu, kita akan membangun fitur login yang membedakan akses tiap user, mulai dari membuat tabel database untuk menyimpan data pengguna, mengatur middleware dan proteksi route sesuai role, hingga membuat controller yang menjalankan logikanya.
Sebelum mengikuti sesi belajar Laravel ini, pastikan Anda sudah mengikuti sesi sebelumnya. Panduan ini adalah lanjutan dari materi tentang pembuatan login di Laravel. Jika belum, Anda bisa membacanya terlebih dahulu di halaman Belajar Laravel.
Apa itu Roles?
Role adalah peran yang dimiliki oleh setiap pengguna dalam sistem, misalnya admin, editor, atau user biasa. Setiap role memiliki tanggung jawab dan batasan akses yang berbeda saat menggunakan sistem.
Biasanya, setiap role memiliki satu set permission, yaitu hak akses yang menentukan apa saja yang boleh dilakukan oleh pengguna dengan peran tersebut di dalam sistem.
Membuat Roles di Laravel
Berikut adalah step by step cara membuat roles di Laravel. Dalam panduan ini, kami menggunakan localhost dengan aplikasi Laragon.
Step 1. Membuat model dan migration data
Langkah pertama, kita akan menggunakan model dan migration data user yang sudah disediakan oleh laravel untuk membuat roles dengan field name, email, role, serta password.
Struktur migration table user yang ada pada folder database/migration dengan nama file berikut ****_**_**_*****_create_users_table.php (tanda * sesuai dengan nama file yang ada pada komputer Anda).

Struktur Models yang ada pada folder App/Models/User dengan nama file berikut: user.php.

Step 2. Membuat controller Login
Untuk dapat membuat controller, Anda dapat untuk menjalankan perintah berikut:
php artisan make:controller LoginController
Step 3. Membuat isi dari controller login
Langkah selanjutnya, kita akan membuat function view untuk menampilkan formlogin yang akan kita buat. Berikut adalah contohnya
Step kedua, kita membuat login function untuk memproses data dari email dan password yang pengguna inputkan nantinya. Jangan lupa menambahkan berikut:
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use App\Models\User;Pada bagian atas sebelum class LoginController.

Step ketiga, kita membuat logout function untuk memproses saat mengakhiri session login.

Step 4. Menjalankan Migrate data yang sudah dibuat
Untuk dapat menjalankan migrate data yang sudah dibuat sebelumnya, kita dapat menjalankan perintah berikut:
Bisa menggunakan php artisan migrate jika data belum di migrate dan belum dilakukan perubahan pada file migrationnya, jika sudah termigrate dan sudah melakukan perubaha pada file migrationnya bisa menggunakan php artisan migrate:fresh

Step 5. Menambahkan Route Login serta route permission
Fungsi route di Laravel untuk mengatur URL (alamat web) ke fungsi atau controller tertentu dalam aplikasi. Di dalam file routes/web.php, tambahkan route menampilkan form login serta mengarahkan user sesuai rolesnya.

Step 6. Membuat middleware untuk roles
Fungsi middleware di Laravel melindungi route dan memeriksa izin pengguna. Untuk dapat membuat middleware, Anda dapat untuk menjalankan perintah berikut:
php artisan make:middleware CheckRole
Kemudian, silahkan dapat melakukan Edit file app/Http/Middleware/CheckRole.php untuk membuat role yang diinginkan seperti berikut:

Jangan lupa menambahkan use Illuminate\Support\Facades\Auth; diatas class CheckRole
Setelah melakukan konfigurasi Rolenya silahkan dapat menambahkan middleware yang sudah dibuat pada bootstrap/app,php Jika menggunakan laravel 11, jika menggunakan laravel 10 kebawah ditambahkan pada app/http/kernel.php.
pada bootstrap/app.php

Pada app/http/kernel.php ada pada baris protected $routeMiddleware

Step 7. Membuat tampilan view login, dan tampilan untuk superadmin serta penulis
Pada step ini, kita akan membuat tampilan view formlogin yang akan dipakai untuk menginputkan email dan password untuk loginnya. Kita juga akan membuat tampilan superadmin dan penulis untuk dapat melakukan pengujian terkait roles permissionnya. Berikut contoh skrip yang bisa Anda gunakan:
Skrip view Login
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container d-flex justify-content-center align-items-center vh-100">
<div class="card p-4 shadow" style="width: 400px;">
<h3 class="text-center mb-4">Login</h3>
<form action="{{ route('login') }}" method="POST">
@csrf
<div class="mb-3">
<label for="email" class="form-label">Email</label>
<input type="email" name="email" class="form-control" id="email" required value="{{ old('email') }}">
@error('email')
<div class="text-danger">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label for="password" class="form-label">Password</label>
<input type="password" name="password" class="form-control" id="password" required>
@error('password')
<div class="text-danger">{{ $message }}</div>
@enderror
</div>
<button type="submit" class="btn btn-primary w-100">Login</button>
</form>
</div>
</div>
</body>
</html>
Skrip view superadmin
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Superadmin</title>
</head>
<body>
<h1>Dashboard Superadmin</h1>
<p>Selamat datang, {{ Auth::user()->name }}</p>
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit">Logout</button>
</form>
</body>
</html>Skrip view penulis
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Penulis</title>
</head>
<body>
<h1>Dashboard Penulis</h1>
<p>Selamat datang, {{ Auth::user()->name }}</p>
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit">Logout</button>
</form>
</body>
</html>Step 8. Membuat seeder untuk mengirimkan data ke database
Untuk mengisi data ke dalam database dengan cepat, kita perlu membuat dahulu seeder datanya dengan menjalankan perintah berikut:
php artisan make:seeder UserSeederIsi seeder yang sudah dibuat sebelumnya pada database/seeders/UserSeeder.php, dengan berikut:

Setelah membuat seeder, silahkan dapat menjalankan perintah berikut untuk dapat mengirimkan data ke database.
php artisan db:seed --class=UserSeederPengujian
Silahkan dapat menjalankan php artisan serve. untuk running website laravelnya kemudian silahkan lakukan login sesuai user yang sudah dibuat. berikut contohnya.
Berikut tampilan jika berhasil melakukan login dengan role superadmin akan diarahkan ke page /superadmin. dan ketika mencoba akses page dari penulis maka akan 403 jika skrip sesuai dan sebaliknya.


Penutup
Menerapkan sistem roles di Laravel adalah cara efektif untuk mengatur hak akses pengguna berdasarkan peran atau posisi mereka dalam aplikasi. Dengan sistem ini, Anda bisa mengelompokkan izin (permission) secara lebih logis dan terstruktur.
Selain itu, penggunaan roles juga meningkatkan keamanan aplikasi karena setiap pengguna hanya bisa mengakses fitur yang sesuai dengan perannya. Hal ini sangat membantu dalam mengelola otorisasi, terutama pada aplikasi berskala besar dengan banyak jenis pengguna.
Demikian artikel belajar Laravel bagian 20 tentang cara membuat roles multi level user login di Laravel. Ikuti terus sesi belajar Laravel dari Rumahweb Indonesia yang kami publikasi setiap bulan. Semoga bermanfaat.



