accessRules()

Merhaba,

accessRules için Yii’nin blog demosundaki kodları incelediğimde (http://www.yiiframework.com/doc/blog/1.1/en/post.create) şunu görüyorum :


return array(

        array('allow',  // allow all users to perform 'list' and 'show' actions

            'actions'=>array('index', 'view'),

            'users'=>array('*'),

        ),

        array('allow', // allow authenticated users to perform any action

            'users'=>array('@'),

        ),

        array('deny',  // deny all users

            'users'=>array('*'),

        ),

    );

Bunları hangi sırayla yazdığımız farketmiyor mu ? Şöyle açıklayayım, ilk kuralda index ve view eylemini tüm üyeler için erişilebilir yap diyor, 2. kuralda tüm eylemleri sadece üyelere erişilebilir yap diyor. BU durumda 1. kuralın üzerine yazılmış ve index, view eylemleri de sadece üyeler tarafından erişilebilir hale gelmiş olmuyor mu ?

Atladığım bir yer var ama bulamıyorum. Bunun mantığını anlatır mısınız lütfen?

Bu konuya ben de geçeceğim, henüz birşey diyemiyorum , eğer birşeyler öğrendiysen öğrenmek isterim. Kısa bir zaman sonra ben de bildiklerimi paylaşıcağım.

anladığım kadarı ile 2. ve 3. kural 1. nin sağlaması gibi bir şey yazmasanda çalışır gibime geliyor ( denemedim )

Çalışma şekli olarak en geniş yetkiyi baz alıyor.


array('allow',

      'actions'=>array('index'),

      'users'=>array('@'),

     ),

array('allow',

     'actions'=>array('index'),

     'users'=>array('*'),

     ),




Bu kodu denediğinde, ister "@" giriş yapan ile "*" herkes girebilir yerlerini değiştir sıralaması hiç önemli değil, sistem en geniş yetkili olanı çalıştırıyor. O da bütün herkes indexe girebilir.

Sistem yukarıdan aşağıya doğru bakıyor.


return array(

        array('allow',  // allow all users to perform 'list' and 'show' actions

            'actions'=>array('index', 'view'),

            'users'=>array('*'),

        ),

        array('allow', // allow authenticated users to perform any action

            'users'=>array('@'),

        ),

        array('deny',  // deny all users

            'users'=>array('*'),

        ),

    );

Fonksiyon şu şekildeymiş, yukarıdan aşağıya doğru döngü ile dönüyor. Her bir kuralda bakıyor bu action’a giriş istenilen değerleri destekliyor mu diye, eğer o kural bizim istekte bulunduğumuz yerle alakası yok ise 0 döndürüyor , eğer girmek istediğimiz yer ve giremiyorsak -1 dönüyor ve giriş yasak diyor. Eğer koşul tamamsa 1 dönüyor ve geri kalan rule’lara bakmıyor action çalışıyor.

Bu yüzden sistemi kurarken en başa izin verilenler konuluyor. Sonra yavaş yavaş yetkisi azaltılarak ekleniyor. En altada izin verilmeyenler.

Sen sıralamayı nasıl yaparsan ona göre sonuç alıyorsun.

Burada da index ve view hiç koşulsuz herkes bakabilir.

Geri kalan actionlar ise hiç tanım olmadığı için geneli "@" login olmanı istiyor.

Bunlar dışında bir istek gelirsede engelliyor.

Paylaşım için teşekkürler -)