Yii - проблема с правилами доступа
Я использую Yii несколько месяцев, и это здорово, однако у меня возникают проблемы с реализацией Правил доступа в моих контроллерах, но странно, только в Производстве.
Начнем с того, что внутри Components я объявил класс UserApplications, где я собираюсь посмотреть, есть ли у пользователя разрешение на переход на определенную страницу.
Один метод внутри этого класса, например:
class UserApplications extends CApplicationComponent{
public function userEmail($id){
$included = ApplicationUser::model()->find('id_app=:id_app AND id_user=:id_user', array('id_app' => 5, 'id_util' => $id));
if (isset($included)){
return TRUE;
}else{
return FALSE;
}
}
}
Таким образом, я вижу, может ли пользователь получить доступ к приложению электронной почты. Если запись существует, она возвращает TRUE, в противном случае - FALSE.
Тогда в моем config->main.php у меня есть:
'components'=>array(
'user_apps'=>array('class'=>'UserApplications'),
Наконец, в моем контроллере электронной почты у меня есть что-то вроде:
public function accessRules()
{
return array(
array('allow',
'actions'=>array('index', 'logout'),
'users'=>array('@'),
'expression'=>'Yii::app()->user_apps->userEmail('.Yii::app()->user->getId().')==TRUE',
),
array('deny',
'users'=>array('*'),
'deniedCallback' => function() {
$this->redirect(array('/site/index'));
},
),
);
}
Это работает в разработке. Я нажимаю на ссылку, и если мне не разрешено заходить в приложение, меня перенаправляют на индекс сайта.
Однако в производстве все, что я получаю, это внутренняя ошибка сервера HTTP 500. Не помогает включить
defined('YII_DEBUG') or define('YII_DEBUG',true);
в файле index.php, поскольку я все еще получаю ошибку 500, сообщение об ошибке вообще отсутствует.
Как я уже сказал, в разработке все нормально.
Любые идеи, почему это имеет такое поведение? Внутренние правила доступа зависят от определенных функций PHP, которые работают только на определенной версии самого PHP и выше? Требования Yii говорят только о 5.1 и выше, а мой сервер развертывания - 5.2.17 (я знаю, они старые над этим работают)
С уважением
1 ответ
По-видимому, анонимные функции стали доступны только в PHP 5.3.
Решение было:
return array(
array('allow',
'actions'=>array('index', 'logout'),
'users'=>array('@'),
'expression'=>'Yii::app()->user_apps->userEmail('.Yii::app()->user->getId().')==TRUE',
),
array('deny', // deny all users
'users'=>array('*'),
'deniedCallback' => array($this, 'redirecting'),
),
);
}
public function redirecting(){
$this->redirect(array('/site/index'));
}
Престижность пользователю Keith в Yii Framework Forum
С уважением