Beranda · Contact Us · Downloads

Yii: Membuat Custom accesRules

Acces rules berguna untuk mendefinisikan action apa saja yang bisa dilakukan oleh masing-masing user. Di sini saya akan memberikan contoh kecil membuat custom access rules
Sekenarionya adalah user terdiri dari 3 level yaitu Administrator, Keyuser, dan Enduser, dimana :
  • Enduser hanya diperbolehkan melakukan action create.
  • Keyuser hanya diperbolehkan melakukan action create dan update.
  • Administrator bisa melakukan semua hal yang dilakukan Enduser dan Keyuser termasuk  delete dan mengakses halaman admin.

Perhatikan langkah berikut :
  1. Pastikan Anda sudah mempunyai user model database (klik di sini)
  2. Membuat class UserLevel
  3. Membuat class EWebUser extends CWebUser
  4. Menentukan class yang harus digunakan
1. User model database 
Untuk langkah pertama saya asumsikan Anda sudah mempunyai user model database, silahkan klik link di atas. Kemudian create user dengan level yang berbeda, berikut saya contohkan 
+----------+---------------+
| username | level         |
+----------+---------------+
| user1    | enduser       |
| keyuser1 | keyuser       |
| admin1   | administrator |
+----------+---------------+
2. Membuat class UserLevel
Silahkan buka editor baru dan tuliskan kode di bawah ini, kemudian simpan /protected/components/UserLevel.php
<?php
class UserLevel {
    const ADMIN = 'administrator';
    const KEYUSER = 'keyuser';
    const ENDUSER = 'enduser';
    public static function getLabel ($user){
        if ($user == self::ADMIN)
            return ADMIN;
        if ($user == self::KEYUSER)
            return KEYUSER;
        if ($user == self::ENDUSER)
            return ENDUSER;
    }
    public static function getList(){
        return array (
        self::ADMIN => self::getLabel(self::ADMIN),
        self::KEYUSER => self::getLabel(self::KEYUSER),
        self::ENDUSER => self::getLabel(self::ENDUSER),
        );
    }
}
?>
3. Membuat class EWebUser
Buka editor baru dan simpan sebagai /protected/components/EWebUser.php
<?php
class EWebUser extends CWebUser{
    protected $_model;
   
    public function getIsAdmin(){
        return Yii::app()->user->role == UserLevel::ADMIN;
    }
    public function getIsKeyuser(){
        return Yii::app()->user->role == UserLevel::KEYUSER;
    }
    public function getIsEnduser(){
        return Yii::app()->user->role == UserLevel::ENDUSER;
    }
    protected function loadUser(){
        if ($this->_model === null){
            $this->_model = user::model()->findByPk($this->id);
        }
        return $this->_model;
    }
    public function getRole(){
        return $this->getState('_level');
    }
}
?>
4. Menentukan class yang harus digunakan
 Buka protected/config/main.php dan temukan bagian application components
// application components
    'components'=>array(
        'user'=>array(
            // enable cookie-based authentication
            'allowAutoLogin'=>true,
            'class'=>'EWebUser',
        ),
Sekarang Anda bisa menggunakan semua fungsi di atas dengan perintah :
Yii::app()->user->isAdmin()~ mengembalikan status Admin
Yii::app()->user->isKeyuser()~ mengembalikan status Keyuser
Yii::app()->user->isEnduser()~ mengemblikan status enduser

Kembali ke sekenario awal dimana enduser hanya bisa create, keyuser hanya create dan update, serta administrator bisa melakukan semuanya termasuk delete dan mengakses halaman admin.
Siapkan model yang akan digunakan, lakukan sedikit ubahan pada controllernya : 
//protected/controllers/MahasiswaController.php
    public function accessRules()
    {
        return array(
            array('allow',  // allow all users to perform 'index' and 'view' actions
                'actions'=>array('index','view'),
                'users'=>array('*'),
            ),
            array('allow', //allow enduser to perform 'create' actions
                'actions'=>array('create'),
                'expression'=>'Yii::app()->user->isEnduser',
            ),
            array('allow', // allow Keyuser to perform 'create' and 'update' actions
                'actions'=>array('create','update'),
                'expression'=> 'Yii::app()->user->isKeyuser',
            ),
            array('allow', // allow administrator to perform 'admin' and 'delete' actions
                'actions'=>array('admin','create','update','delete'),
                'expression'=> 'Yii::app()->user->isAdmin',
            ),
            array('deny',  // deny all users
                'users'=>array('*'),
            ),
        );
    }
Silahkan login sebagai enduser hingga administrator, coba lakukan create, update, hingga delete untuk setiap level dan perhatikan hasilnya. Berikut saya contohkan ketika user1 sebagai enduser mencoba melakukan update, maka aplikasi akan menampilkan halaman error



Good Luck!


Artikel keren lainnya:

2 Tanggapan untuk "Yii: Membuat Custom accesRules"

  1. terimakasih banyak atas tutorial nya gan,, benar2 membantu untuk pedatang baru seperti saya.

    kalau boleh,, minta tutorial soal penggunaan bootstrap untuk yii dong gan. huehehe

    sekali lagi terimaksih banyak atas tutorialnya..

    BalasHapus
    Balasan
    1. sama-sama gan semoga membantu,
      saya tampung dulu yah hehe..

      Hapus