PHP Academy · Pelajaran

Policy: Otorisasi Berbasis Model

Hubungkan policy ke model Eloquent dan gunakan dalam controller.

Pelajaran 4 dari 413 langkah

Policy: Otorisasi Berbasis Model adalah pelajaran PHP Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar PHP Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus PHP Academy mencakup 4 pelajaran total.

Apa Itu Kebijakan

Kebijakan adalah kelas yang mengatur logika otorisasi untuk model Eloquent tertentu. Kebijakan disarankan saat Anda memiliki beberapa tindakan otorisasi untuk model yang sama.

Membuat Kebijakan

Gunakan Artisan untuk membuat kebijakan. Tambahkan --model untuk mengisi metode standar terlebih dahulu.

$ php artisan make:policy PostPolicy --model=Post

Metode Kebijakan

Setiap metode berhubungan dengan suatu tindakan. Metode tersebut menerima pengguna yang telah diautentikasi dan instans model.

<?php
class PostPolicy
{
    public function view(?User $user, Post $post): bool
    {
        return $post->is_published || $user?->id === $post->user_id;
    }

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

    public function delete(User $user, Post $post): bool
    {
        return $user->id === $post->user_id || $user->isAdmin();
    }
}

Mendaftarkan Kebijakan

Pada Laravel 11+, kebijakan ditemukan secara otomatis jika mengikuti konvensi penamaan (model Post → PostPolicy). Anda juga dapat mendaftarkannya secara manual di AuthServiceProvider.

Menggunakan Kebijakan di Pengontrol

Panggil $this->authorize("action", $model) — Laravel secara otomatis menemukan kebijakan yang sesuai.

<?php
public function update(Request $request, Post $post): RedirectResponse
{
    $this->authorize("update", $post);
    $post->update($request->validated());
    return redirect()->route("posts.show", $post);
}

Kebijakan di Blade

Direktif @can bekerja dengan kebijakan dengan cara yang sama seperti dengan gerbang.

@can('update', $post)
    <a href="/posts/{{ $post->id }}/edit">Edit</a>
@endcan

Metode before()

Metode opsional before() pada kebijakan berjalan sebelum metode lainnya. Kembalikan true untuk memberikan akses menyeluruh (misalnya, kepada administrator).

<?php
public function before(User $user, string $ability): ?bool
{
    if ($user->isAdmin()) return true;
    return null; // continue to specific method
}

Tindakan Create (tanpa instans model)

Metode kebijakan create hanya menerima pengguna (tanpa model) karena belum ada instans yang dibuat.

<?php
public function create(User $user): bool
{
    return $user->hasVerifiedEmail();
}

Memeriksa Kebijakan Secara Manual

Gunakan fasad Gate atau model pengguna untuk memeriksa kebijakan secara langsung.

<?php
Gate::allows("update", $post);    // true/false
$user->can("update", $post);      // true/false
$user->cannot("delete", $post);   // true/false

Respons Kebijakan

Kembalikan objek Response dari metode kebijakan untuk menyesuaikan pesan penolakan.

<?php
use Illuminate\Auth\Access\Response;

public function publish(User $user, Post $post): Response
{
    return $user->isEditor()
        ? Response::allow()
        : Response::deny("Only editors can publish posts.");
}

Menguji Kebijakan

Uji kebijakan dengan bertindak sebagai pengguna tertentu di PHPUnit.

<?php
public function test_owner_can_delete_post(): void
{
    $user = User::factory()->create();
    $post = Post::factory()->create(["user_id" => $user->id]);
    $this->assertTrue($user->can("delete", $post));
}

Ringkasan

Kebijakan mengelompokkan otorisasi tingkat model. Buat dengan make:policy --model. Gunakan $this->authorize() di pengontrol dan @can di Blade. Gunakan before() untuk melewati pemeriksaan bagi administrator.

Pemeriksaan Singkat

Metode kebijakan mana yang hanya menerima pengguna tanpa instans model?

Gratis untuk memulai

Belajar PHP dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
49
Pelajaran
195

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Policy: Otorisasi Berbasis Model” gratis?

Ya — teks lengkap “Policy: Otorisasi Berbasis Model” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus PHP Academy, upgrade ke CoddyKit PRO. Kursus PHP Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Policy: Otorisasi Berbasis Model”?

Hubungkan policy ke model Eloquent dan gunakan dalam controller. Kamu berlatih PHP Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai PHP Academy?

Tidak diperlukan pengalaman sebelumnya. PHP Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Policy: Otorisasi Berbasis Model” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran PHP Academy ini?

Ya. Setiap pelajaran PHP Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Autentikasi dengan Laravel Breeze
  2. Melindungi Rute dengan Middleware
  3. Gate: Pemeriksaan Otorisasi Sederhana
  4. Policy: Otorisasi Berbasis Model
← Kembali ke PHP Academy