Ben yetkilendirme için daha önce kendi yazdığım kütüphaneyi kullanıyordum CodeIgniter zamanlarımda. Şimdi Laravel'in Sentry paketinde aynı özellik var. Diğer kütüphanelere bakmadım var mı diye. Şöyle bir yetki gruplaması yapıyorum:
- posts.create // kullanıcının yeni gönderi oluşturması
- posts.edit.own // kendi gönderilerini düzenleyebilmesi
- posts.edit.all // tüm gönderileri düzenleyebilmesi
- posts.delete.own // kendi gönderilerini silebilmesi
- posts.delete.all // tüm gönderileri silebilmesi
Not: Bu yetki grubu doğrudan söylemek istediğim şeyi açıklamıyor. O yüzden içeriğe değil konsepte odaklanarak okursanız yapmaya çalıştığım yöntemdeki mantığı anlarsanız.
Yetkiler bu şekildeyken, sitenin yönetim panelindeki ana menüyü oluştururken kullanıcının
posts grubunda herhangi bir yetkiye sahip olup olmadığına bakıyorum. Şöyle ki:
<ul class="menu">
<li><a href="{{ url() }}">Anasayfa</a></li>
@if ($user->hasAccess('posts.*'))
<li><a href="{{ url('posts') }}">Gönderiler</a></li>
@endif
...
</ul>
Bu şekilde, kullanıcı en azından sadece gönderi düzenleme yetkisi varsa bile menüyü görebiliyor ama hiçbir alakalı yetkisi yoksa o menüyü görmüyor. Tabii bu güvenliği tam anlamıyla sağlamıyor. Sayfaların adreslerini elle yazıp girebilir kullanıcı. Bunlara rotalarda tek tek kontrol yazmanız gerekiyor.