2012-04-08 19 views
8

Estoy usando mi propia clase de usuario como proveedor de entidad para el sistema de seguridad en Symfony 2.0.Symfony 2: cómo desactivar la consulta del usuario en cada carga de página?

me di cuenta de que en cada recarga de la página Symfony es ir a buscar usuario db:

SELECT t0.id AS ID1, t0.username AS nombredeusuario2, t0.salt AS salt3, t0.password AS password4, t0.email AS email5, t0.is_active AS is_active6, t0.credentials AS credentials7 FROM w9_users t0 WHERE t0.id =? Parámetros: ['23'] Tiempo: 4.43 ms

¿Hay alguna manera fácil de deshabilitar este comportamiento? ¿Tal vez serializar datos de usuario en variables de sesión o almacenarlos en caché de alguna manera?

Respuesta

11

Puede cambiar este comportamiento en el método refreshUser de su UserProvider.

Usted debe tener cuidado al hacer esto con la doctrina: There is an issue at FosUserBundle github, exponiendo las limitaciones:

almacenarlo en la sesión daría lugar a varios problemas, por lo que no se hace por defecto:

si un administrador cambia los permisos de un usuario, los cambios tendrán efecto solo la próxima vez que recupere el usuario de la base de datos. Por lo tanto, el almacenamiento en caché del usuario debe realizarse con cuidado para evitar problemas de seguridad

si simplemente vuelve a utilizar al usuario que se serializó en la sesión, ya no será administrado por Doctrine. Esto significa que tan pronto como desee modificar al usuario o utilizar al usuario en una relación, deberá fusionarlo de nuevo en UnitOfWork (que devolverá un objeto diferente al utilizado por el firewall). La fusión también activará una consulta DB. Y requerir tal lógica romperá parte del controlador incorporado que espera poder usar el objeto de usuario para las actualizaciones.

Cuestiones relacionadas