Hi,
ich habe grade in kleines Problem:
-
ich möchte eine 403 Exception werfen, wenn ein nicht eingeloggter user versucht einen view aufzurufen.
-
für eingeloggte user, die die Rechte nicht haben, funktioniert das auch, aber nicht für anonyme user
accessRules im GlobalController
public function accessRules ( )
{
Yii::log('Get access rules', 'user');
// @formatter:off
$permissions = array
(
array
(
'allow' ,
/**
* merge default actions with permissions from database
*/
'actions' => CMap::mergeArray
(
/**
* These are the default actions which every AUTHENTICATED user could use.
* Like: login, logout, myProfile
*/
array
(
'login',
'logout',
'myProfile',
),
/**
* if there are no permission, add an empty array
*/
(!empty($this -> userGroupPermissionsNames) || $this->userGroupPermissionsNames !== NULL) ? $this->userGroupPermissionsNames : array()
) ,
'users' => array
(
'@',
),
) ,
/**
* allow ALL users to perform the following actions
*/
array
(
'allow',
'actions' => array
(
'login',
'error',
),
),
/**
* deny all except above for ALL users
*/
array
(
'deny',
),
);
// @formatter:on
DebugHelpers::logArray($permissions,'user');
return $permissions;
}
Wenn jetzt versucht wird /user/viewUser aufzurufen passiert nix, also wirklich rein garnix … es wird kein Fehler geworfen und kein view angezeigt.
Ruft man diese URL als eingeloggter User auf, der die Rechte dazu nicht hat, dann wird entsprechend ein 403 geworfen.
config
'onException' => array
(
'ExceptionController' ,
'handleException',
) ,
ExceptionController
class ExceptionController
{
public function handleException ( CExceptionEvent $event )
{
$exception = $event -> exception;
DebugHelpers::logArray ( $exception , 'exception' );
/**
* Create a new controller with ID "Exception".
* With this ID the controller knows where to search the view
*/
$controller = new CController ( 'Exception' );
// set the default layout
$controller -> layout = '//layouts/exception/layout_exception';
// set the page title
$controller -> setPageTitle ( Yii::t ( 'exceptions' , 'Error' , array ( '{code}' => $exception -> statusCode ) ) . ' - ' . Yii::app ( ) -> name );
/**
* 404 ERROR
* PAGE NOT FOUND
*/
if ( get_class ( $exception ) == 'CHttpException' && $exception -> statusCode === 404 )
{
$controller -> render ( '404' , array ( 'exception' => $exception ) );
// set handled = true to prevent Yii to handle the error
$event -> handled = true;
}
/**
* 403 ERROR
* YOU ARE NOT AUTHORIZED TO PERFORM THIS ACTION
*/
if ( get_class ( $exception ) == 'CHttpException' && $exception -> statusCode === 403 )
{
$controller -> render ( '403' , array ( 'exception' => $exception ) );
// set handled = true to prevent Yii to handle the error
$event -> handled = true;
}
}
}
Leider steigt er erst garnicht in die Exception ein, wenn man nicht eingeloggt ist …
Mein UserController erbt von meinem GlobalController, der die Rechte managed und die accessRules enthält … jetzt stellt sich mir grade die Frage, wenn man die Rechte dafür nicht hat, steigt Yii dann überhaupt in meinen UserController ein?
Ich bin für jeden Tipp dankbar
LG