Mejores prácticas de Symfony2: organización adecuada de paquetes que requieren usuarios

He estado trabajando con Symfony2 durante algunas semanas y me encanta.

Sin embargo, estoy un poco confundido con un aspecto. Digamos que tengo dos paquetes, cada uno de los cuales tiene una entidad de "Usuario", que almacena información sobre ese usuario.

Sin embargo, quiero poder realizar la autenticación real con cualquier autenticación que elija el administrador del sitio (incluso si no es una de las entidades de usuario de mis paquetes).

¿Cuáles son las mejores prácticas para organizar estas Entidades y vincularlas a todas, sin dejar de ser flexible con la autenticación real?

Gracias.


ACTUALIZACIÓN: Aquí hay una aclaración.

Imagina que tengo dos paquetes: foro y wiki.

Ahora, para los usuarios, hay muchos datos diferentes que esos dos sistemas querrían almacenar. Entonces, cada uno tendría algún lugar para almacenarlos (como dos mesas diferentes). Sin embargo, ninguno de ellos almacena información de autenticación, solo otra información.

La idea sería que cualquiera que sea el método de autenticación utilizado, podrían obtener ese token y luego determinar qué datos de usuario deberían usar en sus propios paquetes. De esa forma, los paquetes podrían funcionar de forma independiente entre sí y del método de autenticación.

preguntado el 12 de junio de 12 a las 16:06

¿Está diciendo que en realidad hay varias tablas de usuarios en la base de datos, o simplemente que está usando varias clases de Entidad con algo así como herencia con una columna discriminadora? -

Sería equivalente a múltiples tablas de usuarios, más o menos. Revisa mi edición para aclaraciones. -

1 Respuestas

Creo que desea evitar tener múltiples entidades de usuario. Para integrar rápidamente algunas mejores prácticas en su aplicación, eche un vistazo a la FOSUserBundle. Esto le dará aproximadamente el 80% de la funcionalidad que necesita para permitir que los usuarios se registren, inicien sesión, etc. Cree su propio UserBundle dentro de su aplicación que amplíe FOSUserBundle. Por ejemplo, su entidad de usuario probablemente se vería así:

use FOS\UserBundle\Entity\User as BaseUser;

/**
 * Extend the FOSUserBundle base User class.
 * @ORM\Entity
 * @ORM\Table(name="user")
 */
class User extends BaseUser {
    ...
}

Haga referencia a esta entidad de usuario extendida (YourApp\UserBundle\Entity\User) como la entidad de usuario canónica en todos los demás paquetes de su proyecto.

Respondido el 13 de junio de 12 a las 14:06

Eso podría funcionar, pero mi objetivo (que cuanto más leo es imposible) es permitir que el administrador del sitio use CUALQUIER método de autenticación, incluso uno en memoria. Sin embargo, parece que es imposible sin tener una clave externa de cadena artificial, que se vuelve muy feo muy rápido. Sin embargo, revisaré ese paquete. Gracias. - samanime

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