Commits

christiansalazar committed 60af806

Soporte para Filtro de Sesion: onBeforeLogout y condicionales para logout

  • Participants
  • Parent commits 0b3e837

Comments (1)

  1. Christian Salazar repo owner

    ver notas en:

    http://yiiframeworkenespanol.org/wiki/index.php?title=Cruge#CONTROL_AVANZADO_DE_SESIONES_Y_EVENTOS_DE_AUTENTICACION_Y_SESION

    permite definir un metodo onBeforeLogout en el Filtro de Sesion.

    /**
            permite que puedas indicar que hacer antes de cerrar la sesion.
            util porque hay acciones que no podras realizar en onLogout() porque la sesion ya estara cerrada para entonces
            por tanto aqui.
    
            disponible desde el commit: 
                    https://bitbucket.org/christiansalazarh/cruge/commits/60af8068f446639571457fecb6694bb7cdc2140b
        */
        public function onBeforeLogout(/*ICrugeSession*/ $model) {
            // por ejemplo, podrias determinar el tipo de usuario (segun su rol) y redirigir al usuario
            // a esa pagina en onLogin() tras el cierre de sesion (NO AQUI !!)
            //
            return true; // o false para que la sesion no se cierre y vuelvas al action de donde vino.
        }
    

Files changed (2)

components/CrugeWebUser.php

         $usersession = $this->getICrugeSession();
         if ($usersession != null) {
             $filtro = $this->getum()->getSessionFilter();
  1. Christian Salazar repo owner

    la razon de hacer eso con reflect (method_exists) es por compatibilidad con anteriores versiones del filtro. Si hubiese alterado la interfaz del filtro seria lo mas razonable y correcto, pero causaria bugs a los desarrolladores que usan Cruge y que no han actualizado su filtro personalizado.

+			// para compatibilidad con anteriores versiones del filtro
+			if(method_exists($filtro,'onBeforeLogout'))
+				if($filtro->onBeforeLogout($usersession) == false)
+					return false;
             $usersession->logout();
             if ($filtro->onStore($usersession)) {
                 $filtro->onLogout($usersession);

controllers/UiController.php

 
     public function actionLogout()
     {
-        Yii::app()->user->logout();
-        $this->redirect(Yii::app()->user->ui->loginurl);
+		// retorna false si ocurrio un error O si el filtro de sesion
+		// dispone de onBeforeLogin el cual ha retornado false.
+        if(Yii::app()->user->logout() == false){
+			// se devuelve a la URL de donde vino
+	        $this->redirect(Yii::app()->user->returnUrl);
+			return;
+		}else{
+			
+        	$this->redirect(Yii::app()->user->ui->loginurl);
+		}
     }
 
     public function actionUserManagementAdmin()