Странное поведение фрэймворка или мои кривые ручки, но если для action заданы правила авторизации, то при запросе запрещенного для данного юзера url немедленно происходит logout. Как это побороть?
components
'session' => array(
'class' => 'CHttpSession',
'timeout' => 3600 * 2,
),
'authManager' => array(
'class' => 'application.components.PhpAuthManager',
'defaultRoles' => array('guest'),
),
'user' => array(
'class' => 'WebUser',
'allowAutoLogin' => false,
'authTimeout' => (3600 * 24),
'loginUrl' => '/login',
),
правила в контроллере
/**
* @return array action filters
*/
public function filters()
{
return array(
'accessControl', // perform access control for CRUD operations
'postOnly + delete', // we only allow deletion via POST request
);
}
/**
* Specifies the access control rules.
* This method is used by the 'accessControl' filter.
* @return array access control rules
*/
public function accessRules()
{
return array(
array('allow',
'actions'=>array( 'view' ),
'roles'=>array(self::ROLE_ADMIN, self::ROLE_OWNER, self::ROLE_MANAGER),
'users'=>array('@'),
),
array('allow',
'actions'=>array( 'news' ),
'roles'=>array(self::ROLE_ADMIN, self::ROLE_BUSINESS_OWNER),
'users'=>array('@'),
),
array('allow',
'actions'=>array( 'stats' ),
'roles'=>array(self::ROLE_OWNER),
'users'=>array('@'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
родительский класс Controller с таким кодом
public function beforeControllerAction($controller, $action)
{
if(parent::beforeControllerAction($controller, $action))
{
if (Yii::app()->user->getId() == null) {
Yii::app()->user->setReturnUrl(Yii::app()->getRequest()->requestUri);
Yii::app()->getRequest()->redirect('/login');
}
// $controller->layout = 'main';
return true;
}
else
return false;
}