Laravel - Otentikasi: Panduan untuk Pemula

Hai teman-teman, para pengembang Laravel masa depan! Hari ini, kita akan melihat dunia menarik dari Otentikasi Laravel. Jangan khawatir jika Anda baru dalam dunia pemrograman - saya akan menjadi panduan ramah Anda dalam perjalanan ini, menjelaskan segala sesuatu langkah demi langkah. Mari kita mulai!

Laravel - Authorization

Memahami dasar-dasar: Otentikasi vs. Otentifikasi

Sebelum kita masuk ke fitur otentifikasi Laravel, mari kita klarifikasi kesalahan umum:

Otentikasi: Siapa Anda?

Pertimbangkan otentikasi seperti penjaga di klub. Ini tentang membuktikan siapa Anda. Dalam dunia digital, ini biasanya berarti masuk dengan nama pengguna dan kata sandi.

Otentifikasi: Anda diperbolehkan melakukan apa?

Sekarang, otentifikasi seperti daftar VIP. Setelah Anda di dalam klub (terotentikasi), otentifikasi menentukan area mana yang Anda dapat akses. Anda boleh masuk ke ruang VIP? Anda diperbolehkan masuk ke belakang meja DJ?

Dalam Laravel, kita pertama-tama otentikasi pengguna, kemudian kita gunakan otentifikasi untuk mengendalikan apa yang mereka dapat lakukan dalam aplikasi kita.

Mekanisme Otentifikasi dalam Laravel

Laravel menyediakan sistem otentifikasi yang kuat dan fleksibel. Mari kita pecahkan ini menjadi bagian yang mudah dimengerti:

1. Gates

Gates adalah cara sederhana, berdasarkan penutupan, untuk otentifikasi aksi. Pertimbangkan mereka sebagai checkpoint dalam aplikasi Anda.

Berikut adalah cara Anda mendefinisikan sebuah gate:

Gate::define('edit-post', function ($user, $post) {
return $user->id === $post->user_id;
});

Gate ini memeriksa apakah pengguna diperbolehkan mengedit sebuah posting. Itu mengembalikan true jika ID pengguna cocok dengan ID penulis posting.

Untuk menggunakan gate ini dalam controller Anda:

if (Gate::allows('edit-post', $post)) {
// Pengguna dapat mengedit posting...
}

Atau dalam template Blade Anda:

@can('edit-post', $post)
<!-- Tampilkan tombol edit -->
@endcan

2. Policies

Policies adalah kelas yang mengatur logika otentifikasi di sekitar model atau sumber daya tertentu. Mereka seperti penjaga khusus untuk setiap model dalam aplikasi Anda.

mari buat sebuah kebijakan untuk model Post kita:

php artisan make:policy PostPolicy --model=Post

Perintah ini membuat kelas PostPolicy. Mari tambahkan metode kepadanya:

public function update(User $user, Post $post)
{
return $user->id === $post->user_id;
}

Sekarang, Anda dapat menggunakan kebijakan ini dalam controller Anda:

$this->authorize('update', $post);

Atau dalam template Blade Anda:

@can('update', $post)
<!-- Tampilkan tombol update -->
@endcan

3. Peran dan Izin

Meskipun Laravel tidak menyediakan sistem peran bawaan, kita dapat mudah mengimplementasikannya. Berikut adalah contoh sederhana:

Pertama, mari tambahkan kolom 'role' ke tabel pengguna kita:

Schema::table('users', function (Blueprint $table) {
$table->string('role')->default('user');
});

Sekarang, mari buat gate yang memeriksa hak admin:

Gate::define('admin', function ($user) {
return $user->role === 'admin';
});

Kita dapat menggunakan ini dalam controller atau tampilan:

if (Gate::allows('admin')) {
// Pengguna adalah admin...
}
@can('admin')
<!-- Tampilkan tautan panel admin -->
@endcan

4. Middleware

Laravel juga memungkinkan Anda mengendalikan akses di tingkat rute menggunakan middleware. mari buat middleware khusus:

php artisan make:middleware CheckRole

Dalam metode handle middleware ini:

public function handle($request, Closure $next, $role)
{
if (! $request->user()->hasRole($role)) {
abort(403, 'Aksi tidak resmi.');
}

return $next($request);
}

Daftarkan middleware ini dalam app/Http/Kernel.php:

protected $routeMiddleware = [
// ...
'role' => \App\Http\Middleware\CheckRole::class,
];

Sekarang Anda dapat menggunakannya dalam rute Anda:

Route::get('/admin', function () {
//
})->middleware('role:admin');

Tabel Metode

Berikut adalah tabel praktis dari metode utama yang kita cover:

Metode Deskripsi Contoh
Gate::define() Mendefinisikan gate otentifikasi baru Gate::define('edit-post', function ($user, $post) { ... })
Gate::allows() Memeriksa apakah gate mengijinkan aksi Gate::allows('edit-post', $post)
$this->authorize() Mengotentifikasi aksi dalam controller $this->authorize('update', $post)
@can Direktif Blade untuk otentifikasi @can('update', $post) ... @endcan
Gate::forUser() Mendapatkan instance gate untuk pengguna tertentu Gate::forUser($user)->allows('edit-post', $post)

Ingat, otentifikasi tentang mengendalikan apa yang dapat dilakukan pengguna terotentikasi dalam aplikasi Anda. Ini adalah bagian penting dalam pembangunan aplikasi web yang aman dan ramah pengguna.

Sebagai Anda berlatih dan membuat lebih banyak aplikasi, Anda akan merasa nyaman dengan konsep ini. Jangan takut untuk mencoba - itu adalah bagaimana kita semua belajar!

Selamat coding, para ahli Laravel masa depan! ??‍??‍?

Credits: Image by storyset