Session Oturum Kontrolü

Merhaba Arkadaşlar yii frameworkü yeni öğrenmeye başlıyorum. Site İçin Yönetim Paneli yapıyorum ama bir yerde tıkandım. Sizin engin bilgilerinize güveniyorum :) umarım bana yardımcı olursunuz. Yönetim panelinde admin girişi yapmadan önce www.siteminadi/admin yazdığımda www.siteminadi/admin/login sayfasına yönlendirilmesi lazım ve login sayfasında admin girişi yaptıktan sonra da logout olmadan login sayfası açılmaması lazım. Bunu nasıl yapabilirim yardımcı olursanız sevinirim.

Selam,

Yii 1 mi Yii 2 mi? :)

Yii 1




//logout action'ın başına

if(Yii::app()->user->isGuest){

$this->redirect('/login');

}


//login action'ın başına

if(!Yii::app()->user->isGuest){

$this->redirect('/logout');

}




//ayrıca access control için her controller'ında şunu kullanabilirsin

// ? login olmuş, 'admin' sadece admin kullanıcısı, * ise herkes anlamına gelmekte.

// login olması gerekli actionlarda adam login olmadıysa direk login sayfasına yönlendirir...

// allow => izin ver, deny => izin verme


class PostController extends CController

{


    public function filters() {

        return array(

            'accessControl', // perform access control for CRUD operations

        );

    }


    public function accessRules()

    {

        return array(

            array('deny',

                'actions'=>array('create', 'edit'),

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

            ),

            array('allow',

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

                'roles'=>array('admin'),

            ),

            array('deny',

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

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

            ),

        );

    }

}






Hocam burda anlamadığım birkaç nokta var. Birincisi PostController sayfasını ben mi oluşturmam lazım yoksa Gii module ile mi yapmam lazım. İkincisi Yii::app()->user->isGuest bölümündeki user kullanıcıları çektiğim tablo adı olması lazım değil mi?

PostController örnek bir kontroller adı. Sen hangi action’a kullanıcı login yaparak ulaşmasını istiyorsan o controller içine bu fonksiyonları yerleştireceksin.

Yii::app()->user->isGuest (ziyaretçi mi?) ise sana true yada false değerini verir.

Kullanıcı login yapmış ise false değerini, kullanıcı henüz login işlemini yapmamışsa true değerini verir.

Hocam Size çok teşşekkür ederim size zahmet verdiysem kusura bakmayın.

if(Yii::app()->user->isGuest){

$this->redirect(’/login’);

}

//login action’ın başına

if(!Yii::app()->user->isGuest){

$this->redirect(’/logout’);

}

Burda render olayını yüklemeyi unutmuşum diye yönlendirme döngüsü oluşuyordu sonunda hallettim sayenizde tekrardan çok sağolun.

Bir şeye dikkatini çekeyim. Doğru olan yukarıda verdiğim accessRule filtresi ile kontrol yapmaktır.

Controller sayfasında accessRule filtresini kullanıyorum zaten