[SOLVED]Membuat menu berbeda untuk tipe user berbeda dengan rights

Master-master sekalian, bukan saya mau tanya…

Aplikasi yang saya buat memiliki 5 macam tipe user. Untuk membantu mengelola SRBAC saya menggunakan extension rights. Saya melakukan instalasi dan membuat beberapa roles.

Pertanyaanya : bagaimana cara membuat beberapa macam menu yang berbeda untuk tipe user yang berbeda? sepertinya kuncinya berada pada apakah ada fungsi yang harus dipanggil untuk mengetahui yang sedang login ini rolesnya apa…

Thanx before

di WebUsernya ditambahin method hasRole aja yang nanti ngecek database si RBAC…

http://www.yiiframework.com/wiki/60/add-information-to-yii-app-user-by-extending-cwebuser/

http://www.yiiframework.com/doc/api/1.1/CDbAuthManager

jadinya khan tinggal




if (Yii::app()->user->hasRole('admin')) {

  //tampilin menu admin

} else {

  //tampilin menu user biasa

}



oh kalo mas petra itu berdasarkan rolenya yak…

kalo kasus saya ada 5 macam role,cuma ada user yang memiliki 1 role+beberapa aksi tambahan/task (perlu diingat bahwa rights sangat dinamis tidak hanya role saja yang bisa diberikan kepada user,tetapi dapat diberikan role/task/operation)

sehingga kalo saya berdasarkan aksinya… contoh:




if(Yii::app()->user->checkAccess('Users.Admin'))

{

					

   $menu[]='<li><a href="'.Yii::app()->request->baseUrl.'/users/admin">Manage Users</a></li>';

					

}



rights akan memeriksa apakah si user tersebut berhak melakukan aksi Users.Admin

kalo ya simpen kearray seperti diatas,kemudian munculkan deh si array

lebih enak lagi kalo controller kita aksinya namanya sama semua, sehingga bisa lebih dinamis

contoh:

kita punya 3 Controller: Users,Customer,Barang




$pret=array('Users,'Customer','Barang');

foreach($pret as $prot)

{

if(Yii::app()->user->checkAccess($prot.'.Admin') //munculkan menu

if(Yii::app()->user->checkAccess($prot.'.Index') //munculkan menu

if(Yii::app()->user->checkAccess($prot.'.Create') //munculkan menu

}



sekian dulu,semoga ngerti

nice one!

kadang2 emang kalo nampilin menunya ada tombol2 yg spesifik task lebih baik emang pake checkAccess aja :P

yup

apalagi checkAccess udah ada dari sononya,kita ga perlu bikin lagi method tersebut

klonengan gan :P

Maaf lambat jawabnya. Kemarin-kemarin masih sibuk ngerjakan tugas UAS. Sebagai rasa penyesalan (dan terima kasih), dalam waktu dekat saya menyumbang tutorial buat install dan utak-atik menu pakai rights :D

Kembali ke masalah utama. Setelah diperhatikan dan dipikir berlama-lama ternyata saya cuma perlu dua roles untuk menu utama aplikasi saya, dua roles tersebut adalah tu-admin, dan selain-itu (roles lainnya digunakan pada sub-menu).

Jadi inilah kode di layouts/main.php




<?php

        $items = array();

       

        //semua roles bisa melakukan ini.

        $items[] = array('label'=>'Home', 'url'=>array('/site/index'));

        $items[]= array('label'=>'User', 'url'=>array('/user/'));

        $items[]=array('label'=>'Profile', 'url'=>array('/user/myprofile'));

        $items[]=array('label'=>'Update Profile', 'url'=>array('/user/updatemyprofile'));

        $items[]=array('label'=>'About', 'url'=>array('/site/page'));

        $items[]=array('label'=>'Ruangan', 'url'=>array('/ruangan/'));

        $items[]=array('label'=>'Reservasi', 'url'=>array('/reservasi/'));

        $items[]=array('label'=>'Appointment', 'url'=>array('/appointment/indexNA'));


         if(Yii::app()->user->checkAccess('Approval.Indextu')) //berarti TU Bagian admin

         {

                $items[]=array('label'=>'Approval TU', 'url'=>array('/approval/indextu'));

                $items[]= array('label'=>'Appointment Admin', 'url'=>array('/appointment/indexA'));

                $items[]= array('label'=>'Invitation Admin', 'url'=>array('/peserta/admin'));

         }

         

        //semua roles bisa melakukan ini

        

	$items[]=array('label'=>'Login', 'url'=>array('/site/login'), 'visible'=>Yii::app()->user->isGuest);

	$items[]=array('label'=>'Logout ('.Yii::app()->user->name.')', 'url'=>array('/site/logout'), 'visible'=>!Yii::app()->user->isGuest);

        

        

        ?>

	<div id="mainmenu">

		<?php $this->widget('zii.widgets.CMenu',array(

			'items'=>$items

		)); ?>

	</div><!-- mainmenu -->

	<?php if(isset($this->breadcrumbs)):?>

		<?php $this->widget('zii.widgets.CBreadcrumbs', array(

			'links'=>$this->breadcrumbs,

		)); ?><!-- breadcrumbs -->

	<?php endif?>



Dan tidak lupa saya ucapkan terima kasih super atas supportnya… :)

yupp

nice you’ve solved this,hahahaha

kalo gitu topik ini di rename jadi solved ya

Oh ya kalo itu kan Menunya di tulis di Kode, tapi bagai mana kalo menunya itu bisa Flexibel tanpa harus mengubah Kode, Apa perlu kita buat tabel menu untuk menampung semua link, dan sekaligus hak akses dari setiap user…

mohon masukan nya gan…

gan cara make rights gimana ya?ane dah berhasil install nya tapi pas ane tambahin




public function filters() {

		return array(

		    'rights',

		    );


		}

kok g bisa ya?Filter "rights" is invalid. Controller "LksaDataController" does not have the filter method "filterrights".

sudah ketemu belum cara menggunakan RIGHT ???

Gan, sudah fix masalahnya? Biasanya masalah ini disebabkan controller agan bukan inheritance dari RController. Cara paling gampang buka /protected/components/Controller.php ganti code nya menjadi:


class Controller extends RController

mas saya mau nanya untuk bikin user barunya itu bagaimana caranya misal saya mau buat role baru dengan nama Bos dan karyawan, trimakasih

bang, klo untuk yii2 basic gmna yah bang?