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
<?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:
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..