การเรียกใช้เมนูตามสิทธิที่ได้ หมายถึงแสดงเมนูตามที่สิทธิของ user นั้นๆมี
ทบทวนกันหน่อย การกำหนดการเข้าใช้งาน Action ต่างๆกำหนดที่ Controller ถูกใหมครับ เช่น
class ReservationController extends Controller{
.....
.....
public function accessRules(){
return array(
array('allow',
'actions'=>array('view','create','update','index','print','report','department'),
'users'=>array('admin'),
),
array('allow',
'actions'=>array('view','index','email'),
'users'=>array('@'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
.....
.....
}
ด้านบนเป็นการกำหนดสิทธิการเข้าถึงหรือเข้าใช้งาน ถูกใหมครับ
'users'=>array('admin'), หมายถึงเฉพาะ admin
'users'=>array('@'), หมายถึงเฉพาะผู้ที่ login
'users'=>array('*'), หมายถึงใครก็ได้
จาก code ด้านบน
array('allow',
'actions'=>array('view','create','update','index','print','report','department'),
'users'=>array('admin'),
),
หมายถึง อนุญาติ (allow) ให้เฉพาะ admin เท่านั้นที่ 'view','create','update','index','print','report','department'
แต่ปัญหาที่ผมเจอคือเวลาแสดงใน view จะมีเมนูสำหรับ admin ทั้งๆที่ไช่ admin จึงได้ไปปรึกษาอิคคิวซังได้ผลมาดังนี้
การกำหนดเมนูโดยแสดงตามสิทธิของ user ขอย้ำว่าเป็นสว่นของเมนู
$this->widget('zii.widgets.CMenu',array(
'items'=>array(
array('label'=>'delete', 'url'=>array('site/login'), 'visible'=>Yii::app()->user->checkAccess('admin')),
));
กำหนด 'visible'=>Yii::app()->user->checkAccess('admin') ใส่เข้าไปครับ
หมายถึง เมนูนี้จะแสดงถ้าผู้ใช้งานเป็น admin เท่านั้น
ส่วน code ด้านล่างเป็น code ที่เจอบ่อยๆครับ
$this->widget('zii.widgets.CMenu',array(
'items'=>array(
array('label'=>'Home', 'url'=>array('/post/index')),
array('label'=>'About', 'url'=>array('/site/page', 'view'=>'about')),
array('label'=>'Contact', 'url'=>array('/site/contact')),
array('label'=>'Rights', 'url'=>array('/rights'), 'visible'=>Yii::app()->user->checkAccess(Rights::module()->superuserName)),
array('label'=>'Login', 'url'=>array('/site/login'), 'visible'=>Yii::app()->user->isGuest),
array('label'=>'Logout ('.Yii::app()->user->name.')', 'url'=>array('/site/logout'), 'visible'=>!Yii::app()->user->isGuest)
),
));
ผมสนใจตรงที่
array('label'=>'Login', 'url'=>array('/site/login'), 'visible'=>Yii::app()->user->isGuest),
array('label'=>'Logout ('.Yii::app()->user->name.')', 'url'=>array('/site/logout'), 'visible'=>!Yii::app()->user->isGuest)
'visible'=>Yii::app()->user->isGuest หมายถึง เมนูนี้จะแสดงเมื่อเราไม่ได้ login
'visible'=>!Yii::app()->user->isGuest หมายถึง เมนูนี้จะแสดงเมื่อเราทำการ login เสร็จแล้ว