0Pricing
PHP Academy · Ders

Policy'ler: Model Tabanlı Yetkilendirme

Policy'leri Eloquent modellerine bağlayın ve bunları denetleyicilerde kullanın.

Policy'ler: Model Tabanlı Yetkilendirme, CoddyKit'te ücretsiz bir PHP Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, PHP Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. PHP Academy kursu toplamda 4 dersten oluşur.

Politika Nedir

Politika, belirli bir Eloquent modeli için yetkilendirme mantığını düzenleyen bir sınıftır. Aynı model için birden fazla yetkilendirme eyleminiz olduğunda politikaların kullanılması önerilir.

Politika Oluşturma

Bir politika oluşturmak için Artisan'ı kullanın. Standart yöntemleri önceden doldurmak için --model ekleyin.

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

Politika Yöntemleri

Her yöntem bir eyleme karşılık gelir. Kimliği doğrulanmış kullanıcıyı ve model örneğini alır.

<?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();
    }
}

Politikaları Kaydetme

Laravel 11 ve üzeri sürümlerde politikalar, adlandırma kurallarına uyuyorsa otomatik olarak bulunur (Post modeli → PostPolicy). Bunları AuthServiceProvider içinde el ile de kaydedebilirsiniz.

Denetleyicilerde Politikaları Kullanma

$this->authorize("action", $model) çağırın; Laravel eşleşen politikayı otomatik olarak bulur.

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

Blade'de Politika

@can yönergesi, politikalarla da geçitlerde olduğu gibi çalışır.

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

before() Yöntemi

Bir politikadaki isteğe bağlı before() yöntemi, diğer yöntemlerden önce çalışır. Sınırsız erişim vermek için true döndürün (örneğin yöneticiler için).

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

Oluşturma Eylemi (model örneği yok)

create politika yöntemi yalnızca kullanıcıyı alır; henüz bir örnek mevcut değildir.

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

Politikaları El ile Denetleme

Politikaları doğrudan denetlemek için Gate cephe sınıfını veya kullanıcı modelini kullanın.

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

Politika Yanıtları

Reddetme iletisini özelleştirmek için bir politika yönteminden Response nesnesi döndürün.

<?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.");
}

Politikaları Sınama

PHPUnit içinde belirli bir kullanıcı gibi davranarak politikaları sınayın.

<?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));
}

Özet

Politikalar, model düzeyindeki yetkilendirmeyi gruplandırır. make:policy --model ile oluşturun. Denetleyicilerde $this->authorize(), Blade'de @can kullanın. Yönetici atlaması için before() kullanın.

Hızlı Kontrol

Hangi politika yöntemi, model örneği olmadan yalnızca kullanıcıyı alır?

Sıkça Sorulan Sorular

“Policy'ler: Model Tabanlı Yetkilendirme” dersi ücretsiz mi?

Evet — “Policy'ler: Model Tabanlı Yetkilendirme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve PHP Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. PHP Academy kursu toplamda 4 dersten oluşur.

“Policy'ler: Model Tabanlı Yetkilendirme” dersinde ne öğreneceğim?

Policy'leri Eloquent modellerine bağlayın ve bunları denetleyicilerde kullanın. PHP Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

PHP Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te PHP Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Policy'ler: Model Tabanlı Yetkilendirme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu PHP Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her PHP Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Laravel Breeze ile Kimlik Doğrulama
  2. Rotaları Ara Yazılımla Koruma
  3. Gates: Basit Yetkilendirme Denetimleri
  4. Policy'ler: Model Tabanlı Yetkilendirme
← PHP Academy Sayfasına Dön