Laravel - Guest User Gates: A Panduan Pemula

Hai sana, para pemula pengembang! Hari ini, kita akan melihat dunia Laravel dan mengexplore konsep menarik yang disebut Guest User Gates. Jangan khawatir jika Anda baru dalam pemrograman – saya akan menjelaskan setiap langkah secara rinci, seperti yang saya lakukan untuk ribuan siswa selama tahun-tahun mengajar saya. Jadi, ambil secangkir kopi, dan mari kita mulai perjalanan yang menarik ini bersama!

Laravel - Guest User Gates

Apa Itu Guest User Gates?

Sebelum kita masuk ke kode, mari kita pahami apa yang dimaksud dengan Guest User Gates. Bayangkan Anda mengadakan pesta di rumah Anda. Anda memiliki aturan yang berbeda untuk teman dekat Anda dan tamu yang Anda belum kenal baik. Guest User Gates di Laravel bekerja sama seperti itu – mereka membantu Anda menentukan aturan untuk pengguna yang tidak masuk ke aplikasi Anda.

Mengapa Kita Perlu Guest User Gates?

Mungkin Anda bertanya-tanya, " Mengapa memikirkan pengguna tamu? Bisakah kita hanya membuat semuanya umum?" Well, teman muda, keamanan sangat penting dalam pengembangan web. Guest User Gates memungkinkan kita mengendalikan apa yang dapat dan tidak dapat dilakukan oleh pengguna anonim dalam aplikasi kita, menjaga pesta digital kita aman dan menyenangkan bagi semua orang!

Menyiapkan Guest User Gates

Sekarang, mari kita roll up our sleeves dan merumuskan kode. Jangan khawatir jika itu terlihat menakutkan pertama kali – kita akan menjelaskannya baris per baris.

Langkah 1: Definisikan Gate

Pertama, kita perlu mendefinisikan Gate kita. Dalam Laravel, kita biasanya melakukan ini di file AuthServiceProvider.php. Berikut adalah penampilannya:

use Illuminate\Support\Facades\Gate;

public function boot()
{
$this->registerPolicies();

Gate::define('view-post', function (?User $user) {
return true;
});
}

mari kita jelaskan ini:

  1. Kita menggunakan facade Gate, yang menyediakan cara sederhana untuk mengotorisasi aksi di Laravel.
  2. Dalam method boot, kita mendefinisikan gate baru bernama 'view-post'.
  3. Parameter ?User $user memungkinkan gate ini digunakan untuk pengguna yang terotentik dan tamu.
  4. Untuk saat ini, kita mengembalikan true, yang berarti semua orang (termasuk tamu) dapat melihat posting.

Langkah 2: Menggunakan Gate di.Controllers

Sekarang kita telah mendefinisikan gate kita, mari gunakanannya di controller:

use Illuminate\Support\Facades\Gate;

public function show(Post $post)
{
if (Gate::allows('view-post')) {
return view('posts.show', compact('post'));
}

abort(403);
}

Berikut apa yang terjadi:

  1. Kita memeriksa apakah pengguna saat ini (tamu atau terotentik) diizinkan melihat posting.
  2. Jika diizinkan, kita mengembalikan pandangan dengan posting.
  3. Jika tidak diizinkan, kita memutuskan dengan kesalahan 403 (Dilarang).

Langkah 3: Menambah Logika ke Gate

Mari kita membuat gate kita sedikit lebih cerdas. Kita akan memungkinkan tamu melihat hanya posting yang diterbitkan:

Gate::define('view-post', function (?User $user, Post $post) {
return $post->published_at !== null;
});

Sekarang gate kita menerima dua parameter:

  1. Pengguna (yang mungkin null untuk tamu)
  2. Posting tertentu yang kita coba melihat

Kita memeriksa jika posting memiliki tanggal published_at. Jika ya, posting itu dapat dilihat oleh tamu.

Langkah 4: Memperbarui Controller

Mari kita memperbarui controller kita untuk menggunakan logika ini:

public function show(Post $post)
{
if (Gate::allows('view-post', $post)) {
return view('posts.show', compact('post'));
}

abort(403);
}

Perubahan satu-satunya di sini adalah kita meneruskan $post ke method Gate::allows().

Guest User Gates Tingkat Lanjut

Sekarang Anda telah mengetahui dasar-dasar, mari kita lihat beberapa teknik yang lebih tingkat lanjut.

Menggabungkan Logika Tamu dan Pengguna Terotentik

kadang-kadang, Anda ingin aturan yang berbeda untuk tamu dan pengguna terotentik. Berikut cara kita melakukan itu:

Gate::define('view-post', function (?User $user, Post $post) {
if ($user === null) {
return $post->published_at !== null;
}

return $user->id === $post->user_id || $post->published_at !== null;
});

Dalam contoh ini:

  • Tamu hanya dapat melihat posting yang diterbitkan
  • Pengguna terotentik dapat melihat posting mereka sendiri ( bahkan jika belum diterbitkan) dan posting yang diterbitkan

Menggunakan Gates di Template Blade

Gates tidak hanya untuk controller! Anda juga dapat menggunakannya di template Blade Anda:

@can('view-post', $post)
<h1>{{ $post->title }}</h1>
<p>{{ $post->content }}</p>
@else
<p>Maaf, Anda tidak dapat melihat posting ini.</p>
@endcan

Ini membuat template Anda lebih dinamis dan aman.

Praktik Terbaik untuk Guest User Gates

Sekarang kitaakhiri, mari bicarakan tentang beberapa praktik terbaik yang saya pelajari selama tahun-tahun ini:

  1. Simpan Sederhana: Mulai dengan gate yang sederhana dan tambahkan kompleksitas jika diperlukan.
  2. Jelaskanlah: Selalu periksa izin, bahkan jika Anda khawatir rute itu adalah umum.
  3. Gunakan Kelas Kebijakan: Untuk logika otorisasi yang kompleks, pertimbangkan penggunaan kelas Kebijakan daripada gate inline.
  4. Uji Gates Anda: Tulis tes untuk memastikan gates Anda ber perilaku dengan benar untuk kedua pengguna tamu dan pengguna terotentik.

Kesimpulan

Selamat! Anda baru saja mengambil langkah pertama ke dunia Guest User Gates di Laravel. Ingat, seperti belajar menunggang sepeda, itu mungkin merinding pertama kali, tetapi dengan latihan, Anda akan mulai meluncur dalam waktu yang singkat.

Berikut adalah tabel rujukan cepat dari metode yang kita bahas:

Metode Deskripsi
Gate::define() Mendefinisikan gate baru
Gate::allows() Memeriksa apakah gate mengizinkan aksi
@can Direktif Blade untuk pemeriksaan gate

Terus coding, terus belajar, dan yang paling penting, bersenang-senang! Siapa tahu, mungkin suatu hari Anda akan menjadi yang mengajarkan generasi pengembang baru tentang keajaiban Laravel. Sampai jumpa lagi, selamat coding!

Credits: Image by storyset