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;
    }

}
}

Таким образом, я вижу, может ли пользователь получить доступ к приложению электронной почты. Если запись существует, возвращается ИСТИНА, в противном случае — ЛОЖЬ.

Затем в моем 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 (старый, я знаю, они над ним работают)

С уважением


person Silver    schedule 02.07.2013    source источник


Ответы (1)


По-видимому, функции Anonymous стали доступны только в 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

С уважением

person Silver    schedule 02.07.2013