Laravel

Laravel Rol ve Yetkilendirme İşlemleri

Laravel Rol ve Yetkilendirme İşlemleri: Kullanıcı Erişim Kontrolü:

Laravel, kullanıcıların belirli işlemleri gerçekleştirme yetkilerini kontrol etmek için güçlü bir yetkilendirme (authorization) sistemi sunar. Bu sistem, kullanıcıların rollerine ve izinlerine göre erişim kontrolü yapmanızı sağlar. Laravel’de yetkilendirme işlemleri için GatesPolicies ve Spatie Laravel Permission gibi araçlar kullanılabilir. Bu makalede, bu araçları kullanarak nasıl rol ve yetkilendirme işlemleri gerçekleştirebileceğinizi adım adım öğreneceksiniz.


1️⃣ Yetkilendirme Nedir ve Neden Kullanılır?

Yetkilendirme, kullanıcıların hangi işlemleri yapabileceğini belirleyen bir güvenlik mekanizmasıdır. Örneğin:

  • Admin: Tüm işlemleri yapabilir.
  • Editör: İçerikleri düzenleyebilir ancak kullanıcı yönetemez.
  • Yazar: Sadece kendi yazılarını oluşturabilir ve düzenleyebilir.

Yetkilendirme, uygulamanızın güvenliğini artırır ve kullanıcıların yetkilerine göre işlem yapmasını sağlar. Laravel, bu işlemleri GatesPolicies ve Spatie Laravel Permission paketi gibi araçlarla kolayca yönetmenizi sağlar.


2️⃣ Laravel Gates ile Basit Yetkilendirme

Gates, kullanıcının belirli bir işlemi yapıp yapamayacağını kontrol eden kapılardır. Örneğin, bir makaleyi sadece yazarı düzenleyebilsin diyelim. Bu durumda, bir Gate tanımlayarak bu kontrolü gerçekleştirebilirsiniz.

Gate Tanımlama

Gate’ler, AuthServiceProvider.php dosyasında tanımlanır. Örneğin, bir kullanıcının makaleyi güncelleyip güncelleyemeyeceğini kontrol eden bir Gate tanımlayalım:

use Illuminate\Support\Facades\Gate;
use App\Models\User;
use App\Models\Article;

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

    Gate::define('update-article', function (User $user, Article $article) {
        return $user->id === $article->user_id;
    });
}

Bu Gate, kullanıcının makaleyi güncelleyip güncelleyemeyeceğini kontrol eder. Eğer kullanıcı makalenin yazarı ise, güncelleme işlemi yapabilir.

Gate Kullanımı

Gate’leri kullanarak yetkilendirme kontrolü yapabilirsiniz. Örneğin:

if (Gate::allows('update-article', $article)) {
    // Kullanıcı makaleyi güncelleyebilir
} else {
    abort(403, 'Bu makaleyi düzenleme yetkiniz yok.');
}

Bu kod, kullanıcının makaleyi güncelleyip güncelleyemeyeceğini kontrol eder ve yetkisi yoksa 403 hatası döndürür.


3️⃣ Laravel Policies ile Yetkilendirme

Policies, daha karmaşık yetkilendirme senaryoları için kullanılır. Policies, belirli bir model için yetkilendirme kurallarını tanımlamanızı sağlar. Örneğin, bir Article modeli için ArticlePolicy oluşturabilirsiniz.

Policy Oluşturma

Policy oluşturmak için aşağıdaki Artisan komutunu kullanabilirsiniz:

php artisan make:policy ArticlePolicy --model=Article

Bu komut, app/Policies/ArticlePolicy.php dosyasını oluşturur.

Yetkilendirme Tanımlama

Policy dosyasında, yetkilendirme kurallarını tanımlayabilirsiniz. Örneğin, bir kullanıcının makaleyi güncelleyip güncelleyemeyeceğini kontrol eden bir metot tanımlayalım:

namespace App\Policies;

use App\Models\User;
use App\Models\Article;

class ArticlePolicy
{
    public function update(User $user, Article $article)
    {
        return $user->id === $article->user_id;
    }
}

Bu metot, kullanıcının makaleyi güncelleyip güncelleyemeyeceğini kontrol eder.

Policy Tanımlama

Policy’i AuthServiceProvider.php dosyasında tanımlayarak kullanabilirsiniz:

use App\Models\Article;
use App\Policies\ArticlePolicy;

protected $policies = [
    Article::class => ArticlePolicy::class,
];

Policy Kullanımı

Policy’i kullanarak yetkilendirme kontrolü yapabilirsiniz. Örneğin:

if ($user->can('update', $article)) {
    // Kullanıcı makaleyi güncelleyebilir
}

Bu kod, kullanıcının makaleyi güncelleyip güncelleyemeyeceğini kontrol eder.


4️⃣ Spatie Laravel Permission ile Rol Bazlı Yetkilendirme

Daha gelişmiş bir rol ve yetkilendirme sistemi için Spatie Laravel Permission paketini kullanabilirsiniz. Bu paket, kullanıcılara roller ve izinler atamanızı sağlar.

Paketi Kurma

Spatie Laravel Permission paketini projenize eklemek için aşağıdaki komutu çalıştırın:

composer require spatie/laravel-permission

Migration Çalıştırma

Paketin gerekli tablolarını oluşturmak için migration’ları çalıştırın:

php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
php artisan migrate

Model’e Yetkilendirme Ekleme

User modeline HasRoles trait’ini ekleyerek kullanıcılara roller ve izinler atayabilirsiniz:

use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use HasRoles;
}

Rol ve Yetki Tanımlama

Roller ve izinler oluşturmak için aşağıdaki kodu kullanabilirsiniz:

use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

Role::create(['name' => 'admin']);
Role::create(['name' => 'editor']);

Permission::create(['name' => 'edit articles']);
Permission::create(['name' => 'delete articles']);

Kullanıcıya Rol Atama

Kullanıcılara roller atamak için aşağıdaki kodu kullanabilirsiniz:

$user->assignRole('admin');

Yetki Kontrolü

Kullanıcının belirli bir role veya izne sahip olup olmadığını kontrol edebilirsiniz:

if ($user->hasRole('admin')) {
    // Kullanıcı admin rolüne sahip
}

if ($user->can('edit articles')) {
    // Kullanıcı makale düzenleme iznine sahip
}

5️⃣ Sonuç

Laravel, kullanıcıların yetkilerini kontrol etmek için güçlü bir yetkilendirme sistemi sunar. Gates ve Policies ile basit ve orta düzey yetkilendirme işlemlerini gerçekleştirebilirsiniz. Daha gelişmiş bir rol ve yetkilendirme sistemi için Spatie Laravel Permission paketini kullanabilirsiniz. Bu araçlar, uygulamanızın güvenliğini artırır ve kullanıcıların yetkilerine göre işlem yapmasını sağlar.

Eğer Laravel ile web uygulamaları geliştiriyorsanız, bu yetkilendirme yöntemlerini kullanarak kullanıcı erişim kontrolünü kolayca yönetebilirsiniz. 

Web Doktoru

Matematikçi, Adli Bilişim Uzmanı, Bil. Yük. Müh. Full Stack Developer

Son Gönderiler

Mobil Uygulama mı Web Uygulaması mı? İşletmeniz İçin Doğru Tercih Rehberi

İşletmeniz için dijital bir çözüm geliştirmek istediğinizde, karşılaşacağınız ilk soru genellikle budur: "Mobil uygulama mı…

3 Haziran 2026

WordPress Site Hız ve Performans Optimizasyonu: Sayfa Yüklenme Süresini 3 Saniyenin Altına İndirin

Web sitesi hızı, 2026'da sadece bir teknik detay değil — doğrudan iş sonuçlarını etkileyen kritik…

1 Haziran 2026

Sosyal Medya Pazarlama Rehberi 2026: Platformlara Göre Strateji ve Büyüme Taktikleri

Sosyal medya, 2026 itibarıyla 5.2 milyar aktif kullanıcıya ulaşmış durumda. Türkiye'de ise 65 milyondan fazla…

29 Mayıs 2026

İçerik Pazarlama Stratejileri 2026: Dönüşüm Oranını Artıran 10 Adım

"İçerik kraldır" diyerek başlamak bu noktada klasik kaçabilir ama gerçek değişmiyor: doğru içerik, doğru kişilere,…

27 Mayıs 2026

Google Ads Kampanya Optimizasyon İpuçları: ROI’yi Maksimize Eden 12 Strateji

Google Ads, işletmelerin online görünürlüklerini artırmaları için en güçlü reklam platformlarından biri. Ancak bütçenizi doğru…

25 Mayıs 2026

WordPress Güvenlik Açıkları ve Çözümleri: Sitenizi Korumak İçin Kapsamlı Rehber

WordPress, dünyanın en popüler içerik yönetim sistemi (CMS) ve bu popülerlik, siber suçluların en sık…

21 Mayıs 2026