[英]Yii - How to Hide/View Button in CGridview Based on User's Level?
我试图在我的/views/file/admin.php中查看或显示CGridView中的按钮(CButtonColumn):
....
//getLevel()==1 means ADMIN, getLevel==2 means common users
array(
'class'=>'bootstrap.widgets.TbButtonColumn',
'template'=>'{view}{update}{delete}', 'visible'=> (Yii::app()->user->getLevel()==1),
'deleteConfirmation'=>"js: 'Are you want to delete '+$(this).parent().parent().children(':first-child').text()+ '?'",
//I tried to modify with this code below, but there's nothing happens, 'view' button not
//display when I access as common user (getLevel()==2)
'buttons'=>array(
'view' => array(
'visible'=> Yii::app()->user->getLevel()==2,
),
)
),
....
WebUser.php
<?php
class WebUser extends CWebUser{
protected $_model;
protected function loadUser()
{
if ( $this->_model === null ) {
$this->_model = User::model()->findByPk($this->id);
}
return $this->_model;
}
function getLevel()
{
$user=$this->loadUser();
if($user)
return $user->id_level;
return 100;
}
}
?>
我尝试执行该代码,但是“视图”按钮不显示,并且在加载页面时没有错误。 任何人都可以帮我解决这个问题吗? 非常感谢。
您已经将列可见性设置为仅在该行上的管理员用户
'template'=>'{view}{update}{delete}', 'visible'=> (Yii::app()->user->getLevel()==1),
所以
'view' => array(
'visible'=> Yii::app()->user->getLevel()==2,
),
没有效果。 删除visible
的第一个设置。 另外@soju和@Rafay说visible
应该是一个php表达式因此它应该读取
'view' => array(
'visible'=> 'Yii::app()->user->getLevel()==2',
),
在您的情况下,您需要扩展bootstrap.widgets.TbButtonColumn
。
Yii::import('zii.widgets.grid.CButtonColumn');
class EButtonColumnWithRightsCheck extends CButtonColumn{
public function init() {
//{view} {delete} {update}
$permissions = array();
// Client.User.View
$permissions['view'] = Yii::app()->user->checkAccess(ucfirst($this->grid->controller->module->id) . '.' . ucfirst($this->grid->controller->id) . '.View');
$permissions['delete'] = Yii::app()->user->checkAccess(ucfirst($this->grid->controller->module->id) . '.' . ucfirst($this->grid->controller->id) . '.Delete');
$permissions['update'] = Yii::app()->user->checkAccess(ucfirst($this->grid->controller->module->id) . '.' . ucfirst($this->grid->controller->id) . '.Update');
foreach ($permissions as $action => $permission) {
if ($permission === false) {
$this->template = str_replace('{' . $action . '}', '', $this->template);
}
}
// call parent to initialize other buttons
parent::init();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.