Estamos realizando algunos ajustes de seguridad (módulos de autogestión de estudiantes) y uno de ellos, es que la contraseña se debe cambiar cada ## (## a definir) días.
En modo de prueba hacemos la siguiente pregunta en el controller (REF-CODE) y de acuerdo a la respuesta se lo redirecciona a la página de configuración, donde el estudiantes debe cambiar su contraseña. Esto funciona y bien. Pero para que dicha validación se ejecute en todas las páginas, ¿Donde debería agregar esta línea (REF-CODE), para que lo heredan todos los controllers? ¿Me explico? Desde ya muchas gracias.
REF-CODE
if (kernel::persona()->get_debo_cambiar_clave())
$this->nuevo_request(‘configuracion’, ‘index’);
En 3W existe la clase src/siu/extension_kernel/helper_controlador_g3w2.php, la cual posee el método pre_accion, el mismo ejecuta lo que tiene dentro antes de que se ejecute la acción propiamente dicha, allí dentro podrías poner el control que queres hacer. A modo de referencia:
Personalizas la clase src/siu/extension_kernel/helper_controlador_g3w2.php:
<?php
namespace nombre_pers\extension_kernel;
use SIU\Chulupi\kernel;
use SIU\Chulupi\nucleo\NuevoRequest;
class helper_controlador_g3w2 extends \siu\extension_kernel\helper_controlador_g3w2 {
public function pre_accion(){
parent::pre_accion();
// Acá iría el control
if (kernel::persona()->get_debo_cambiar_clave()) {
$nuevo_request = new NuevoRequest('configuracion', 'index', false);
$nuevo_request->set_mensaje_post_nav("¡Debes cambiar tu contraseña!");
throw $nuevo_request;
}
}
}
Otra cosa, deberías excluir la operación de Configuración de la redirección, sino se te va a producir un ciclo de redirección infinito, seria mas o menos así:
<?php
namespace nombre_pers\extension_kernel;
use SIU\Chulupi\kernel;
use SIU\Chulupi\nucleo\NuevoRequest;
class helper_controlador_g3w2 extends \siu\extension_kernel\helper_controlador_g3w2 {
public function pre_accion() {
parent::pre_accion();
// Acá iría el control
$operacion = kernel::ruteador()->get_id_operacion();
if (kernel::persona()->get_debo_cambiar_clave() && (!in_array($operacion, array("configuracion", "logger", "acceso")))) {
$nuevo_request = new NuevoRequest('configuracion', 'index', false);
$nuevo_request->set_mensaje_post_nav("¡Debes cambiar tu contraseña!");
throw $nuevo_request;
}
}
}