403 Exception wird nicht für anonyme user geworfen

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 … :blink:

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

OK, also ich habs nun endlich herausgefunden.

Ich habe die LoginURL für anonyme User gesetzt und diese einfach mit Yii::app()->baseUrl …

Da dabei aber bei denied access kein redirect durchgeführt wurde, hat Yii letztendlich garnicht gemacht, also keinen 403 geworfen und nicht weitergeleitet.

Ich habe die loginUrl jetzt auch NULL gesetzt und nun wirf mir Yii auch die Exception …