Skip navigation


Di dalam menangani aksi login dan logout untuk pengguna suatu aplikasi, Yii telah dilengkapi dengan komponen CWebUser. Komponen ini diinisiasi dan dikonfigurasi pada berkas “/protected/config/main.php”

'components' => array(
        'user' => array(
            'class' => 'CWebUser',
            // enable cookie-based authentication
            'allowAutoLogin' => true,
            'loginUrl' => array('/login'),
        ),

properti loginUrl menentukan URL mana yang akan dituju aplikasi ketika pengguna gagal terautentikasi. Untuk kasus ini URLnya adalah “/login”. Yang menjadi permasalahan di sini adalah kadang-kadang saya membutuhkan tampilan login yang berbeda, misalnya untuk user biasa dan administrator.

Sebagai contoh, ketika user yang belum terautentikasi mengakses URL “/account” maka tampilan loginnya akan berupa

dan ketika user yang belum terautentikasi mengakses URL “/admin” maka tampilan loginnya diharapkan sedikit lebih keren seperti berikut

Ini dapat dilakukan dengan beberapa cara. Cara pertama adalah dengan menggunakan beberapa view pada sebuah controller untuk login. Cara kedua adalah menggunakan beberapa controller dengan mengatur loginUrl secara dinamis.

Pada cara pertama, karena loginUrl tidak berubah (“/login”) maka saya hanya mempunyai sebuah controller yang akan menangani login yakni LoginControlle yang secara khusus penanganannya dilakukan pada actionIndex. Pada action tersebut saya akan memeriksa properti returnUrl yang berisi URL yang dapat dituju setelah login berhasil. Sebenarnya returnUrl ini merupakan URL yang mengalihkan ke loginUrl jika user tidak terautentikasi.

public function actionIndex(){
	//Login Form Processing
	if (strpos(Yii::app()->user->returnUrl, 'admin') !== false) {
		$this->layout = 'admin_login';
	}
	$this->render('index', array('form' => $form));
}

Jika pada returnUrl terdapat kata ‘admin’ maka layout dari Controller tersebut akan diganti dengan yang lain. Cara pemeriksaan dengan strpos di atas agak sedikit hardcode, jadi lebih baik diganti dengan cara lain🙂

Cara kedua adalah dengan menggunakan beberapa Controller. Saya biasanya menggunakan beberapa kelas abstrak yang diturunkan dari CController untuk pengguna yang berbeda. Sebagai contoh CGuestController, CMemberController, CAdminController yang semuanya diletakkan di direktori “/protected/components/controllers”. Penggunaannya adalah sebagai berikut. Untuk semua controller yang diakses oleh guest akan diturunkan dari CGuestController, dst. Perbedaan teknis antara ketiganya adalah pada method accessRules dan layout.

abstract class CMemberController extends CController {
    public $layout = 'member/main';
    public function filters() {
        return array(
            'accessControl',
        );
    }

    public function accessRules() {
        return array(
            array('allow',
                'users' => array('@'),
            ),
            array('deny',
                'users' => array('*'),
            ),
        );
    }

}
abstract class CAdminController extends CMemberController {
    public $layout = 'admin/main';
    public function filters() {
        return array(
            'accessControl',
        );
    }

    public function accessRules() {
        return array(
            array('allow',
                'roles' => array('administrator'),
            ),
            array('deny',
                'users' => array('*'),
            ),
        );
    }

}

Nah, untuk membedakan login viewnya adalah dengan mengoverride loginUrl pada method init di CAdminController.

public function init(){
	Yii::app()->user->loginUrl = array('/administration/login');
	parent::init();
}

Done

3 Comments

  1. Many thanks for posting “Multiple Login View di Yii « Males Koding”.
    I actuallymay undoubtedly end up being coming back for a
    great deal more reading and commenting soon enough. Thank you, Octavia

  2. Hello! I’ve been reading your web site for some time now and finally got the courage to go ahead and give you a shout out from Lubbock Texas! Just wanted to tell you keep up the fantastic work!

  3. I simply could not go away your website before suggesting that I really loved the usual info a person provide to your guests? Is going to be again frequently in order to investigate cross-check new posts


One Trackback/Pingback

  1. By Custom Layouting di Yii Module « Males Koding on 04 Mar 2011 at 6:56 am

    […] Works « Multiple Login View di Yii […]

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: