Laravel Permission
Kullanıcıları roller ve izinlerle ilişkilendiren gelişmiş yetkilendirme paketi.
Kurulum
Composercomposer require spatie/laravel-permission
Dokümantasyon & Kullanım
MarkdownSpatie 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,@canvecan()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,admingibi 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');
Paket Bilgileri
Etiketler
Diğer Paketler
TALL stack üzerine kurulu, zarif ve son derece genişletilebilir admin paneli ve CRUD yönetim aracı.
API oluşturmadan Vue, React veya Svelte bileşenlerini klasik Laravel controller ve view yapısıyla SPA olarak çalıştırmayı sağlayan adaptör.
PHP ve Laravel için popüler, güçlü, esnek görsel işleme, kırpma, filtreleme ve optimizasyon kütüphanesi.