Laravel - Autorisasi: Panduan untuk Pemula

Halo sana, para pengembang Laravel masa depan! Hari ini, kita akan mendalam ke dunia yang menarik dari Laravel Authorization. Jangan khawatir jika Anda baru dalam pemrograman - saya akan menjadi panduan ramah Anda dalam perjalanan ini, menjelaskan segala sesuatu secara langkah demi langkah. Mari kita mulai!

Laravel - Authorization

Memahami Dasar-Dasar: Autentikasi vs. Autorisasi

Sebelum kita melompat ke fitur authorization Laravel, mari kita klarifikasi kesalahan umum:

Autentikasi: Siapa Anda?

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

Autorisasi: Anda diperbolehkan melakukan apa?

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

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

Mekanisme Autorisasi di Laravel

Laravel menyediakan sistem autorisasi yang kuat dan fleksibel. Mari kita pecahkannya menjadi bagian yang mudah dimengerti:

1. Gates

Gates adalah cara sederhana, berdasarkan closure, untuk mengautorisasi aksi. Pikirkan 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 di kontroler Anda:

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

Atau di template Blade Anda:

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

2. Policies

Policies adalah kelas yang mengatur logika autorisasi di sekitar model atau sumber daya tertentu. Mereka seperti pengaman 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 sebuah metode kepadanya:

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

Sekarang Anda dapat menggunakan kebijakan ini di kontroler Anda:

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

Atau di template Blade Anda:

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

3. Roles dan Permissions

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

Pertama-tama, tambahkan kolom 'role' ke tabel pengguna Anda:

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

Sekarang, mari buat sebuah gate yang memeriksa hak akses admin:

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

Kita dapat menggunakan ini di kontroler 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 di app/Http/Kernel.php:

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

Sekarang Anda dapat menggunakannya di rute Anda:

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

Tabel Metode

Berikut adalah tabel praktis dari metode utama yang kita bahas:

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

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

Sekarang, saat 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