Merhaba arkadaşlar bu dersimizde sizlere Yii Framework içinde yetkilendirme işlemleri nasıl yapılır bunu anlatmaya çalışacağım.Öncelikle Yii Framework bu yetkilendirme işlemleri için hazır bir sistem olan ve dünya genelinde başkaca yazılımlarda da kullanılan RBAC(role based access control) sistemini kullanmaktadır.Sizlerin yapacağı işlem sadece Yii ile hazır gelen bu özelliği kurmak ve kullanmayı öğrenmek olacak.Bu RBAC sistemiyle çok büyük ve oldukça karışık yetkilendirme işlemlerinin çok kolay bir şekilde üstesinden gelebilirsiniz. Öncelikle aşağıda ki şekilde bir yetki tablonusunun üzerinden RBAC sistemini anlatmaya başlayalım.

yii-rbac
yii-rbac

Yukarıda ki resmi anlatmaya başlayalım:Öncelikle bir haber sitenizin olduğunu varsayalım.

  • Haber sitesinde ki haberleri ekleme, güncelleme, okuma ve silme görevleri olacak.Bu görevleri resmin en alt tarafında Bronz Renkli görevler ile ifade edeceğiz.
  • Daha sonra her haber yazarı sadece kendi haberlerini güncelleyebilmeli. Bu görevi yukarıda ki resmin ortasında Sarı Renkli ara görev ile ifade edeceğiz.
  • Resmin en üst tarafında bulunan Turkuaz Renkli yetkiler var. Bronz Renkli ve Sarı Renkli görevleri, Turkuaz Renkli yetkilerin üstüne atayacağız.
  • Son olarak bu görev, ara görev ve yetkileri kullanıcılar(user) üzerine ya da görev ve ara görevleri yetkiler üzerine parent-child şeklinde atayarak RBAC sistemini kullanmaya başlayabiliriz. Bu atama işlemlerini daha sonra veri tabanında yapacağız.

Şimdi özet olarak şunu söyleyebiliriz:

  • Admin yetkisi üzerinden ok işaretleri takip ederek gidersek, bu yetki Editör,Author(Yazar) ve Reader(Okur) yetkilerinin yapabildiği tüm görevleri yapabilir.
  • Editör yetkisi üzerinden ok işaretleri takip ederek gidersek, bu yetki Reader(Okur) yetkisinin yapabildiği tüm görevleri yapabilir aynı zamanda updatePost görevi ile tüm haberleri güncelleyebilir.
  • Author(Yazar) yetkisi üzerinden ok işaretlerini takip edersek, bu yetki Reader(Okur) yetkisinin yapabildiği tüm görevleri yapabilir.Bunun yanında updateOwnPost görevi ile sadece kendi haberlerini güncelleyebilir.

Yukarıda ki anlattıklarım size şimdilik çok karışık gelebilir ancak elimden geldiği kadar renkler kullanarak açık bir şekilde anlatmaya çalıştım. Eğer İngilizceniz yeterli ise Getting to Understand Hierarchical RBAC Scheme sayfasından daha detaylı inceleyebilirsiniz.
Evet arkadaşlar şimdi RBAC sistemimizi Yii içene kuralım.Öncelikle bunun için gerekli olan User tablosu zaten Yii içinde hazır olarak geldiği için yeniden kullanıcı(User) tablosu oluşturmamıza gerek yok. Ancak bu yetki,ara görev ve görevlerin parent-child ilişkilerini,türlerini ve kullanıcılara atama işlemlerini tutacak 3 adet tabloya ihtiyacımız var.Bu tabloları oluşturma SQL kodları Yii Framework dosyaları framework/web/auth/schema-mysql.sql içinde hazır olarak bizlere verilmiş. Tabloları, MYSQL içinde veritabanınıza bu kodlar yardımı ile eklemelisiniz.
Kodlar aşağıda ki gibi:

Bu SQL kodlarını veri tabanına girdikten sonra AuthAssignment,AuthItemChild,AuthItem isimli 3 adet tablonuz daha olacak.Bu tablolardan, AuthItem tablosunda görev,ara görev,yetki isimleri ve bunların türleri olacak. AuthItemChild tablosunda, yetki ve görevlerin hiyerarşik yapısını tutan parent-child bilgileri olacak. AuthAssignment tablosunda ise görev,ara görev ve yetkileri kullanıcılara atayacağız. Bu atama işlemlerini isterseniz veri tabanından kendiniz yapabilirsiniz, isterseniz de aşağıda ki kodları bir .php sayfasına yazarak sayfayı çalıştırıp otomatik ekleme yaptırabilirsiniz. Otomatik eklemede bazı fonksiyonların çalışabilmesi için bir ayarlama daha yapmanız gerekiyor. protected/config/main.php içinde components array içine aşağıda ki kodlarda eklenmelidir.

Artık yukarıda ki resimde ki aynı yetkilendirmeyi, veri tabanına eklemek istersek, aşağıda ki kodları kullanabiliriz:

Bu kodlar yardımı ile tüm hiyerarşik yapıyı oluşturmuş olduk. AuthItemChild ve AuthItem tablolarımızı doldurduk fakat kişilere yetki, ara görev ve görevlerini henüz atamadık. Yani AuthAssignment tablomuz henüz boş. Bunları da başka kodlar yardımı ile atama şansınız var fakat bu tabloyu MYSQL’e giderek kendinizin doldurmasını tavsiye ederim. AuthAssignment tablosunda userid seçip görev, ara görev ve yetki atayabilirisiniz. Zaten AuthAssignment tablosu User tablosu ile otomatik ilişkilidir.
AuthAssignment tablosunu da kodlar yardımı ile atamak isterseniz bu defa aşağıdaki kodları kullanmalısınız.

Yukarıda kullanıcıların isimlerine göre atama yaptık, istersek kullanıcı id değerlerine göre de atama yapabiliriz.

Evet artık RBAC sistemimiz Yii Framework içinde tamamen hazır hale gelmiş oldu.Şimdi basit bir örnek yapalım.Mesela sitemde ki kullanıcı createPost(haber ekleme) görevine yetkili mi değil mi şu şekilde öğrenebiliriz.

Ya da readPost(Haber Okuma) görevine yetkili mi değil mi şu şekilde de öğrenebiliriz.

Peki bir actionUpdatePost için yetkilendirme yapmak istersek.Örneğin updatePost işlemine yetkili değilse, işlem yapamasın:

Peki sadece editor yetkili ise ve işlem yapabilsin istersek, aşağıda ki kodları kullanmamız gerekecek:

RBAC sistemi dışında sadece kullanıcı adına göre de kısıtlama yapabilirsiniz:

Ya da misafir kullanıcı için de aynı işlemleri yapabilirsiniz:

Son olarak Controller sayfasında(protected/controllers/HaberlerController) yukarıda ki yetkilendirmelerden farklı olarak çok çeşitli izinler veya kurallar yazabilirsiniz.
Bu kuralların veya izinlerin içinde yetkileri kullanabilirsiniz.Örneğin Controller içinde ki action’ları kimler görebilir ya da göremez:

Daha fazla kural ya da izin için accessRules sayfasını ziyaret edebilirsiniz. Şimdilik bu kadar. Herkese başarılar dilerim…

Yazar Hakkında

Leave a Reply

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Close