Pada tutorial kedua ini, kita akan belajar tentang authentikasi user. Di sini ada user admin, dan ada user public.
Tutorial ini akan sama seperti tutorial authentikasi sebelumnya di artikel CMS Sederhana - authentikasi admin dan user. Secara umum ada 3 komponen berikut :
Langkah 1: Menggunakan Laravel Breeze untuk Setup Autentikasi
Instal Laravel Breeze:
Laravel Breeze menyediakan scaffolding autentikasi yang sederhana, cepat, dan efisien. Untuk menginstalnya, jalankan perintah berikut:
composer require laravel/breeze --dev
Install dan Generate Scaffolding:
Setelah berhasil menginstal Laravel Breeze, jalankan perintah di bawah ini untuk membuat scaffolding autentikasi:
php artisan breeze:install
Kita akan menggunakan blade untuk stack nya.
Jalankan Migrate:
Jalankan migrasi untuk membuat tabel users yang dibutuhkan oleh autentikasi.
php artisan migrate
Jalankan npm:
Jalankan perintah berikut untuk meng-compile assets yang dibutuhkan untuk tampilan autentikasi.
npm install && npm run dev
Langkah 2: Menambahkan Kolom Role di Tabel Users
Tambah Kolom role di Tabel users:
Buka file migration create_users_table.php dan tambahkan kolom role dengan nilai default user.
$table->string('role')->default('user'); // bisa user atau admin
Full code untuk file create_users_table.php sebagai berikut:
public function up(): void
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->string('role')->default('user'); // bisa user atau admin
$table->rememberToken();
$table->timestamps();
});
}
Migrasi Ulang Database:
Jalankan migrasi ulang agar kolom role ditambahkan:
php artisan migrate:fresh
Setup Seeder User dan Admin:
Tambahkan user dan admin di DatabaseSeeder.php untuk testing awal di file app\database\seeders\DatabaseSeeder.php
use App\Models\User;
User::create([
'name' => 'Admin',
'email' => 'admin@example.com',
'password' => bcrypt('password'),
'role' => 'admin',
]);
User::create([
'name' => 'User',
'email' => 'user@example.com',
'password' => bcrypt('password'),
'role' => 'user',
]);
Jalankan Seeder:
php artisan db:seed
Cek data di database, di tabel users, hasilnya seperti berikut:
Langkah 3: Menambahkan Middleware Role untuk Admin dan User
Buat Middleware Baru:
Jalankan perintah berikut untuk membuat middleware Admin.
php artisan make:middleware AdminMiddleware
Edit Middleware AdminMiddleware.php:
Buka file app/Http/Middleware/AdminMiddleware.php dan tambahkan logika berikut untuk membatasi akses hanya untuk admin.
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class AdminMiddleware
{
public function handle(Request $request, Closure $next)
{
if (auth()->check() && auth()->user()->role === 'admin') {
return $next($request);
}
return redirect('/dashboard')->with('error', 'Access denied.');
}
}
Registrasikan Middleware:
Buka file app/Http/Kernel.php dan tambahkan middleware baru ke dalam array $routeMiddleware:
protected $middlewareAliases = [
// Middleware lainnya
'admin' => \App\Http\Middleware\AdminMiddleware::class,
];
Langkah 4: Setup Route dan Dashboard Khusus Admin dan User
Edit Route di web.php:
Tambahkan route admin/dashboard dan user/dashboard, dengan middleware yang sesuai.
use App\Http\Controllers\AdminDashboardController;
use App\Http\Controllers\UserController;
Route::get('/dashboard', [UserController::class, 'index'])->middleware(['auth', 'verified'])->name('dashboard');
Route::middleware(['auth', 'admin'])->group(function () {
Route::get('/admin/dashboard', [AdminDashboardController::class, 'index'])->name('admin.dashboard');
});
Buat Controller Admin dan User:
Buat controller AdminController dan UserController dengan perintah:
php artisan make:controller AdminDashboardController
php artisan make:controller UserController
Implementasi Method Dashboard di Controller:
UserController:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function index()
{
return view('user.dashboard');
}
}
AdminController:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class AdminDashboardController extends Controller
{
public function index()
{
return view('admin.dashboard');
}
}
Edit file AuthenticatedSessionController.php
Buka file AuthenticatedSessionController.php di dalam app/Http/Controllers/Auth/. Edit Method store:
public function store(LoginRequest $request): RedirectResponse
{
$request->validate([
'email' => 'required|email',
'password' => 'required',
]);
if (Auth::attempt($request->only('email', 'password'))) {
$request->session()->regenerate();
// Cek role user dan arahkan ke halaman yang sesuai
if (Auth::user()->role === 'admin') {
return redirect()->intended('/admin/dashboard');
}
return redirect()->intended('/dashboard');
}
return back()->withErrors([
'email' => 'The provided credentials do not match our records.',
]);
}
Buat Halaman View untuk Admin dan User:
resources/views/admin/dashboard.blade.php:
Buat folder admin di dalam resources/views dan buat file dashboard.blade.php di dalamnya. isi code dashboard.blade.php sebagai berikut:
<h1>Welcome Admin!</h1>
<p>Ini adalah halaman dashboard khusus admin.</p>
resources/views/user/dashboard.blade.php:
Buat folder user di dalam resources/views dan buat file dashboard.blade.php di dalamnya.
<h1>Welcome User!</h1>
<p>Ini adalah halaman dashboard untuk user biasa.</p>
Langkah 5: Menambahkan Link Logout
Buat Tombol Logout di View:
Tambahkan link logout di layout.blade.php atau di setiap dashboard.
<form action="{{ route('logout') }}" method="POST"> @csrf <button type="submit">Logout</button> </form>
Cek Hasil Akhir
Silahkan coba buka http://localhost:8000/login, dan login sebagai admin, jika berhasil akan menghasilkan berikut:
Coba login sebagai user, dan pastikan user diarahkan ke /dashboard dan tidak dapat mengakses /admin/dashboard.
Dengan mengikuti langkah-langkah di atas, sekarang Anda telah menyelesaikan Modul Autentikasi Admin dan User dengan halaman dashboard terpisah sesuai dengan role.