Laravel’de İzin Yönetimi: Deneyimlerden Dersler
Arka uç geliştirici olarak kariyerimin çoğunu Python — FastAPI, Django, Flask ile çalışarak geçirdim.
Her zaman derin bir şekilde önemsediğim bir konu vardı:
👉 karmaşık hale gelmeden ölçeklenebilir sistemler inşa etmek.
Ancak sürekli karşılaştığım bir problem vardı… hangi teknoloji yığını kullanırsam kullanayım.
<p>🧠 <strong>Problem: “Küresel Rol” Tuzağı</strong><br/>Başta, her şey basit görünür:<br/>• Kullanıcılar<br/>• Roller<br/>• İzinler<br/>Ama sistemler büyüdükçe, işler bozulmaya başlar.<br/>Çoğu RBAC (Role-Based Access Control) paketi şunu varsayar:<br/>👉 bir kullanıcı ya Admin'dir… ya da değildir.<br/>Ama gerçek dünya sistemleri asla bu kadar basit değildir.</p>
<p><strong>Gerçek bir senaryo:</strong><br/>• Bir kullanıcı <strong>Şube A Yönetici</strong>dır.<br/>• Aynı kullanıcı <strong>Şube B İzleyicisi</strong>dir.<br/>Şimdi kendinize sorun:<br/>👉 Bunu nasıl temiz bir şekilde modelleyebilirsiniz?</p>
<p>Çoğu zaman biz böyle yapmayız.<br/>Şu tür koşullar yazarız:<br/>if ($user->role === 'manager' && $branch_id === 1) { ... }<br/>Ve yavaş yavaş…<br/>• mantık her yere yayılır<br/>• bağımlılıklar artar<br/>• ve küçük bir değişiklik sistemin birden fazla parçasını bozabilir.</p>
<p>😵 <strong>Ne Zaman Problem Oldu</strong><br/>Birçok projede aynı paterni gördüm:<br/>• Roller artmaya başladı<br/>• İzinler belirsizleşti<br/>• Erişim sorunlarını çözmek zorlaşmaya başladı.<br/>Kullanılan teknoloji yığını fark etmezdi.<br/>👉 Problem framework'te değildi.<br/>👉 Problem modeldeydi.</p>
<p>🔄 <strong>Dönüm Noktası</strong><br/>Laravel tabanlı sistemlerde çalışırken, mevcut çözümleri, örneğin Spatie'yi inceledim.<br/>Bunlar harikadır — temizdir, basittir ve yaygın olarak kullanılır 👏<br/>Ama karmaşık sistemlerde bazı sınırlamalarla karşılaşmaya başladım:<br/>• Bağlamsal yetkilendirme için gerçek destek yoktu<br/>• Çok kiracılı izinleri yönetmek zor<br/>• Roller ile kapsamlar arasındaki ilişkileri modellemek zordu.<br/>Bir noktada, problemin "çözümleriyle başa çıkmaya" çalışmaktan vazgeçtim.<br/>👉 Yeniden düşünmeye karar verdim.</p>
<p>🚀 <strong>Laravel IAM Oluşturma</strong><br/>Roller üzerine odaklanmak yerine,<br/>👉 <strong>ilişkiler + bağlam + çözümleme</strong> olarak düşünmeye başladım.</p>
<p>Beni şuna yönlendirdi:<br/><strong>Laravel IAM (v0.2.0)</strong></p>
<p>⚙️ <strong>Temel Fikir: Dört Seviye Gerçeklik</strong><br/>Mantığı sert bir şekilde kodlamak yerine, sistem izinleri katmanlı özeliklerle çözümler:</p>
<ol>
<li>*<em>Küresel *</em>→ <em>.</em> (Süper Admin)</li>
<li>
<strong>Kaynak Wildcard</strong> → invoice.*</li>
<li>
<strong>İşlem Wildcard</strong> → *.approve</li>
<li>
<strong>Atomik İzin</strong> → invoice.approve
Bu, izin kontrollerini:
• öngörülebilir
• ölçeklenebilir
• anlaması kolay hale getiriyor.</li>
</ol>
<p>🧩 <strong>Bağlam Önemlidir</strong><br/>Aynı rol her yerde aynı anlama gelmez.<br/>Bu yüzden sistem, şunları destekler:<br/>• Kiracı-tabanlı roller<br/>• Ekip-tabanlı roller<br/>• Şube seviyesinde izinler<br/>👉 Kodunuzu karmaşık hale getirmeden.</p>
<p>💡 <strong>Öğrendiklerim</strong><br/>Bu yolculuk bana önemli bir şey öğretti:<br/>👉 <strong>Yetkilendirme roller hakkında değil — bağlam hakkında</strong><br/>Ve daha da önemlisi:<br/>👉 <strong>Mimari, framework'ten daha önemlidir</strong></p>
<p>⚙️ <strong>Alt Yapıda Neler Var</strong><br/>Sistemin arka planındaki bazı tasarım kararları:<br/>• <strong>Kayıt Deseni</strong> → kaynakları ve işlemleri birbirinden ayırıyor<br/>• <strong>Esnek Rol Atama</strong> → ID'leri, slug'ları veya modelleri destekler<br/>• <strong>Kapsamlı Middleware</strong> → bağlamsal yetkilendirmeyi destekler<br/>• <strong>Blade Direktifleri</strong> → temiz UI izin kontrolleri<br/>Ve evet — her şey gerçek iş akışlarını simüle eden bir test paketiyle destekleniyor ✅</p>
<p>🛠️ <strong>Açık Kaynak</strong><br/>Projemi açık kaynak yaptım ve geri bildirim almak isterim:<br/>📦 <a href="https://packagist.org/packages/apurba-labs/laravel-iam" target="_blank" rel="noopener noreferrer">https://packagist.org/packages/apurba-labs/laravel-iam</a><br/>💻 <a href="https://github.com/apurba-labs/laravel-iam" target="_blank" rel="noopener noreferrer">https://github.com/apurba-labs/laravel-iam</a></p>
<p>💬 <strong>Sohbet Edelim</strong><br/>Sistemlerinizde karmaşık izinleri nasıl yönetiyorsunuz?<br/>RBAC ile benzer zorluklarla karşılaştınız mı?</p>
<p><em>Bu yazı, <a href="https://dev.to/challenges/wecoded-2026">2026 WeCoded Challenge</a>'a bir gönderidir: Deneyimlerin Yankıları</em></p>
<p>☕ Akıllı ve mantıklı bir şekilde inşa edildi.</p>Kaynak: Orijinal Makale


