Web Doktoru - Laravel’de Rol ve Yetkilendirme İşlemleri: Kullanıcı Erişim Kontrolü
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 Gates, Policies 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.
Yetkilendirme, kullanıcıların hangi işlemleri yapabileceğini belirleyen bir güvenlik mekanizmasıdır. Örneğin:
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 Gates, Policies ve Spatie Laravel Permission paketi gibi araçlarla kolayca yönetmenizi sağlar.
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’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’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.
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şturmak için aşağıdaki Artisan komutunu kullanabilirsiniz:
php artisan make:policy ArticlePolicy --model=ArticleBu komut, app/Policies/ArticlePolicy.php dosyasını oluşturur.
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’i AuthServiceProvider.php dosyasında tanımlayarak kullanabilirsiniz:
use App\Models\Article;
use App\Policies\ArticlePolicy;
protected $policies = [
Article::class => ArticlePolicy::class,
];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.
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.
Spatie Laravel Permission paketini projenize eklemek için aşağıdaki komutu çalıştırın:
composer require spatie/laravel-permissionPaketin gerekli tablolarını oluşturmak için migration’ları çalıştırın:
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
php artisan migrateUser modeline HasRoles trait’ini ekleyerek kullanıcılara roller ve izinler atayabilirsiniz:
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasRoles;
}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ılara roller atamak için aşağıdaki kodu kullanabilirsiniz:
$user->assignRole('admin');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
}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.
İşletmeniz için dijital bir çözüm geliştirmek istediğinizde, karşılaşacağınız ilk soru genellikle budur: "Mobil uygulama mı…
Web sitesi hızı, 2026'da sadece bir teknik detay değil — doğrudan iş sonuçlarını etkileyen kritik…
Sosyal medya, 2026 itibarıyla 5.2 milyar aktif kullanıcıya ulaşmış durumda. Türkiye'de ise 65 milyondan fazla…
"İç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,…
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…
WordPress, dünyanın en popüler içerik yönetim sistemi (CMS) ve bu popülerlik, siber suçluların en sık…