1111111111111


เว็บใหม่ที่ผมขอใช้ฟรีครับ ภาวนาอยู่ว่าวันดีคืนดีข้อมูลคงไม่หายเหมือนเว็บอื่น

วันเสาร์ที่ 19 กุมภาพันธ์ พ.ศ. 2554

การเรียกใช้เมนูตามสิทธิที่ได้ (ช่วงนี้เมืองไทยเรียกร้องสิทธิกันบ่อยต้องอินเทรนหน่อย)

การเรียกใช้เมนูตามสิทธิที่ได้ หมายถึงแสดงเมนูตามที่สิทธิของ 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 เสร็จแล้ว