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=PostPolitika 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>
@endcanbefore() 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/falsePolitika 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
- Laravel Breeze ile Kimlik Doğrulama
- Rotaları Ara Yazılımla Koruma
- Gates: Basit Yetkilendirme Denetimleri
- Policy'ler: Model Tabanlı Yetkilendirme