Membuat Menu Berbeda Untuk User Dengan Extension Rights - YII Framework

Saat kita menggunakan ekstension rights di YII Framework untuk membuat hak akses bagi setiap user yang login, berbagai permasalahan akan muncul, dan masalah yang paling sering muncul tentunya, "bagaimana untuk membuat menu berbeda pada user yang login dengan hak akses berbeda ?".


Contoh kasus, misal ada user yang login dengan memiliki level 'author', maka menu nya akan muncul hanya untuk user yang memiliki level author saja dan untuk user yang mempunyai level admin akan berbeda.

 Memahami contoh kasus tersebut, kita bisa mengatasinya dengan cara berikut :

 Buatlah sebuah fungsi/method tambahan pada modules rigths kita di "protected/modules/rights/componenst/RWebUser.php" 
public function isRole($roleParam) {  
     $allroles=Rights::getAssignedRoles($this->id);  
     foreach ($allroles as $ii)  
     {  
       if($ii->name==$roleParam)  
       return true;  
     }  
      return false;  
 }

Fungsi/method di atas digunakan untuk mengetahui apakah seorang user yang sedang login memiliki level role dari parameter $roleParam. Jadi misal kita memanggil fungsi "Yii::app()->user->isRole('author')" berarti kita ingin mengecek apakah user yang sedang login saat ini memiliki tipe author atau tidak. Maka dari itu ketika membuat menu, kita bisa tambahkan code berikut untuk memastikan suatu menu tersebut hanya dapat dilihat oleh user yang memiliki level "author":
array(
'label'=>'naamaMenu', 
'url'=>array('/site/login'),
'visible'=>Yii::app()->user->isRole('Moderator')&&!Yii::app()->user->isGuest
),


Tidak hanya itu, kita juga dapat menampilkan menu yang memang dapat diakses oleh seorang user. Misal, saya ingin menampilkan link menu yang mengarah ke halaman "User/admin". Saya tidak tahu user dengan level apa saja yang dapat mengakses "User/Admin". Karena tidak mau repot, saya ingin sistem secara otomatis harus menampilkan menu tersebut hanya kepada orang-orang yang memang diizinkan mengakses menu tersebut saja. Maka kita dapat membuat menu sebagai berikut :

array(
'label'=>'User Admin', 
'url'=>array('/user/admin'), 
'visible'=>Yii::app()->user->checkAccess('User.Admin')
),



Pada code di atas dapat kita lihat menu tersebut akan visible kepada user yang diizinkan mengakses action "User.Admin" saja. Dengan cara begitu kita tidak perlu repot mencari tahu siapa saja yang diizinkan mengakses suatu menu.


2 komentar:

  1. mas,,
    maaf saya masih newbie..
    saya mau tanya...
    saat ini saya mau membuat sebuat website , dimana hanya ada admin dan user..
    admin bisa mengakses ke semua, namun user hanya bisa melihat dan memesan (tanpa harus login)
    kira2 gmn yah ?

    *mohon bantuannya

    BalasHapus
  2. di fitur extension right ada kok gan ..
    justru extension right memang di fungsikan untuk itu, "authenticate" ..
    kalo yang saya posting di atas cuma untuk menghilangkan menu pada user yang engga memiliki hak akses aja ..

    BalasHapus

Diberdayakan oleh Blogger.