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 :
- Pastikan Anda sudah mempunyai user model database (klik di sini)
- Membuat class UserLevel
- Membuat class EWebUser extends CWebUser
- 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
3. Membuat class EWebUser<?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),
);
}
}
?>
Buka editor baru dan simpan sebagai /protected/components/EWebUser.php
<?php4. Menentukan class yang harus digunakan
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');
}
}
?>
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.phpSilahkan 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
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('*'),
),
);
}
Good Luck!

terimakasih banyak atas tutorial nya gan,, benar2 membantu untuk pedatang baru seperti saya.
BalasHapuskalau boleh,, minta tutorial soal penggunaan bootstrap untuk yii dong gan. huehehe
sekali lagi terimaksih banyak atas tutorialnya..
sama-sama gan semoga membantu,
Hapussaya tampung dulu yah hehe..