有没有办法根据用户在控制器中的模型输入来限制视图? 我想根据自己的选择隐藏/显示自己的页面。 profile_hide_show,其值为'p'=> public,'f'=>朋友,'m'=> me
public function accessRules()
{
return array(
array('allow',
'actions'=>array('view'),
'users'=>array('?'), //?based on user's selection in model,
),
);
}
答案 0 :(得分:0)
执行此操作检查action或loadModel函数。您无法访问accessRules中的模型。
public function loadModel($id) {
$type = modelname();
$class = CActiveRecord::model($type);
$model = $class->findByPk($id);
if($model === null)
throw new CHttpException(404, 'The requested page does not exist.');
if($model->profile_hide_show != 'p')
throw new CHttpException(404, 'You cannot view this profile.');
return $model;
}
答案 1 :(得分:0)
Yii访问控制允许您在下降到控制器的本地方法之前执行基本控制。
您可以使用访问控制列表的“表达式”属性启用访问控制。例如:
public function accessRules(){
$owner_id = $this->loadModel()->owner_id;
return array(
array('allow',
'actions'=>array('action1'),
'expression'=>"{$user->id}=={$owner_id}",
),
array('allow',
'actions'=>array('action2'),
'expression'=>'(Yii::app()->user->id == ($_GET[\'id\']))',
),
array('allow',
'actions'=>array('action3'),
'expression'=>'"Yii::app()->controller->isEnabledByUser()',
)
);
}
如果您看到action3的表达式,您将看到可以调用将返回将由expression属性计算的true / false值的函数。
public function isEnabledByUser(){
$user_id = Yii::app()->user->id;
$user = User::model()->findByPk($user_id);
if ($user->show_my_page == 'Y')
return true;
else
return false;
}