auth Öne Çıkan
12500 yıldız

Laravel Permission

Geliştirici: Spatie

Kullanıcıları roller ve izinlerle ilişkilendiren gelişmiş yetkilendirme paketi.

Kurulum

Composer
composer require spatie/laravel-permission

Dokümantasyon & Kullanım

Markdown

Spatie Laravel Permission

Laravel Permission paketi, Eloquent modellerinize esnek, güçlü ve performans odaklı roller (roles) ve izinler (permissions) atamanızı sağlayan ekosistemin en popüler yetkilendirme kütüphanesidir.

Neden Tercih Edilmeli?

  • Standart Laravel Entegrasyonu: Laravel'in yerleşik Gate, @can ve can() mekanizmalarıyla %100 uyumlu çalışır.
  • Önbellek (Cache) Desteği: Roller ve izinler otomatik belleğe alınarak veritabanı sorgu yükü en aza indirilir.
  • Doğrudan ve Dolaylı İzinler: Hem kullanıcılara doğrudan izin verilebilir hem de roller üzerinden miras alınabilir.
  • Çoklu Guard Desteği: web, api, admin gibi farklı auth guard'larını eşzamanlı destekler.
  • Takım / Multi-Tenant Desteği: Gelişmiş projelerde takımlara veya müşteri alanlarına özel rol hiyerarşisi kurulabilir.

Kurulum

Composer aracılığıyla paketi projenize dahil edin:

composer require spatie/laravel-permission

Paket yapılandırma ve veritabanı migration dosyalarını yayınlayıp çalıştırın:

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

Model Yapılandırması

User modelinize HasRoles trait'ini ekleyin:

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use HasRoles;

    // ...
}

Temel Kullanım

Rol ve İzin Tanımlama

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

// İzinleri oluştur
$editArticles = Permission::create(['name' => 'edit articles']);
$deleteArticles = Permission::create(['name' => 'delete articles']);
$publishArticles = Permission::create(['name' => 'publish articles']);

// Rol oluştur ve izinleri ata
$editorRole = Role::create(['name' => 'editor']);
$editorRole->givePermissionTo([$editArticles, $publishArticles]);

$adminRole = Role::create(['name' => 'admin']);
$adminRole->givePermissionTo(Permission::all());

Kullanıcıya Rol ve İzin Atama

$user = User::find(1);

// Tekil veya dizi halinde rol atama
$user->assignRole('editor');
$user->assignRole(['writer', 'editor']);

// Doğrudan kullanıcıya özel izin tanımlama
$user->givePermissionTo('delete articles');

// Rolü kaldırma
$user->removeRole('writer');

Yetki Kontrolleri (PHP & Blade)

Controller veya servis katmanında:

// İzin kontrolü
if ($user->can('edit articles')) {
    // Makaleyi düzenleme yetkisi var
}

// Rol kontrolü
if ($user->hasRole('admin')) {
    // Admin işlemleri
}

// Birden fazla rol kontrolü
if ($user->hasAnyRole(['admin', 'editor'])) {
    // İşlem serbest
}

Blade şablonlarında:

@can('edit articles')
    <a href="{{ route('articles.edit', $article) }}" class="btn btn-warning">
        Düzenle
    </a>
@endcan

@role('admin')
    <div class="alert alert-info">
        Yönetici Paneli
    </div>
@endrole

Route Middleware kullanımı:

Route::group(['middleware' => ['role:admin']], function () {
    Route::get('/admin/dashboard', [AdminController::class, 'index']);
});

Route::get('/articles/create', [ArticleController::class, 'create'])
    ->middleware('permission:publish articles');