Función de ejecución automática de Symfony

Construí un sistema de inicio de sesión en Symfony. En cada pagina que está asegurado Necesito validar que el nombre de usuario coincida con la contraseña. Escribí una función: isValidAuth() in myUser.class.php. Sin embargo, necesito escribir estas líneas en acciones para cada página:

if(!isValidAuth())
{
    $this->forward('home', 'logout');
}

lo cual es bastante inconveniente cuando tiene varias páginas y módulos que están protegidos. ¿Hay alguna forma de que pueda ejecutar estas líneas como una función si la página is_secured? Como al acceder executeIndex() al cargar la página?

preguntado el 27 de agosto de 11 a las 20:08

además de mi respuesta. Hay algunas otras formas de lograr dicha funcionalidad de "ejecución automática". por ejemplo, puede extender sfAction con su constructor personalizado o usar el preExecute() y postExecute() funciones que se ejecutarán cada vez que llame a una acción de su módulo -

2 Respuestas

Hay una función incorporada en Symfony que maneja esto. El manaual es para la versión 1.2 pero también debería funcionar para la versión 1.4: http://www.symfony-project.org/book/1_2/06-Inside-the-Controller-Layer.

dado que los valores de configuración en 1.4 han cambiado a verdadero / falso en lugar de encendido / apagado, tendrá que cambiarlos: http://www.symfony-project.org/reference/1_4/en/08-Security

aplicaciones / frontend / modules / mymodule / config / security.yml

all:
  is_secure:   true       # for all actions of a module

foo:
  is_secure:   false       # action foo is public 

en apps / frontend / config / settings.yml tendrás que proporcionar un módulo y una acción que inicie sesión, etc.

all:
  .actions:
    login_module:  default
    login_action:  login

    secure_module: default
    secure_action: secure

Y por último, pero no menos importante, debe configurar la bandera autenticada en su usuario (generalmente después del inicio de sesión;)):

$this->getUser()->setAuthenticated(true);

por cierto. tal vez debería instalar el sfdoctrineguardplugin que proporciona el manejo del usuario, inicio de sesión, etc. de fábrica;)

Respondido 28 ago 11, 12:08

El mejor lugar para esto sería la cadena de filtros, incluso sugeriría extender sfBasicSecurityFilter. Para habilitar su clase extendida, edite apps / myapp / config / filters.yml

rendering: ~
security:
  class: myExtendedSecurityFilter

# Generally, you will want to insert your own filters here

cache:     ~
execution: ~

En lugar de ampliar sfBasicSecurityFilter, también puede crear una nueva clase que amplíe sfFilter. Lea más sobre los filtros aquí:

http://www.symfony-project.org/gentle-introduction/1_4/en/06-Inside-the-Controller-Layer#chapter_06_filters

Respondido 28 ago 11, 13:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.