2011-04-04 13 views
5

Estoy comenzando un proyecto y estoy usando Symfony, la primera vez que uso Symfony, realmente genial, ya instalé el sfDoctrineGuardPlugin y todo está bien hasta ahora, ¿por qué ?, porque frontend los usuarios pueden iniciar sesión en el backend y viceversa, no quiero eso, entonces, empiezo a buscar en Google, encontré Symfony sfDoctrineGuardPlugin custom login query aquí en SO, pero no sé dónde debería ubicar la función, así que no he probado eso.Usuarios frontend y back-end independientes con sfDoctrineGuardPlugin

Como no quiero que los usuarios frontend puedan iniciar sesión en el back-end, creo que puedo usar las credenciales, ¿puedo? pero, Symfony verifica las credenciales de los usuarios después de que se registran, y no quiero que tampoco, entonces, ¿cómo puedo lograr esto ?, tal vez si pudiera tener espacios de nombres en la sesión, puedo verificar si un administrador en el espacio de nombres de back-end y también para los usuarios frontend, por lo que nunca se solucionan, creo.

No sé si realmente si sfDoctrineGuardPlugin tiene alguna configuración que pueda manejar esta situación, ¿existe tal configuración?

Además, en mi backend, me gustaría tener una página para administrar los usuarios frontend, y otros para los usuarios back-end, porque los usuarios frontend tendrán un perfil y direcciones, creo que esto es mucho más fácil, pero no saber por dónde empezar

necesitar algo de ayuda aquí

gracias

+0

Sin embargo, se le ocurrió una respuesta razonable. Sugiero que primero analices si realmente necesitas 2 aplicaciones separadas. Si bien esto puede ser lógico, pronto le resultará difícil reutilizar el código entre las aplicaciones, existe un problema de internacionalización y prueba. Me resulta mucho más fácil tener 1 aplicación. FYI, Symfony2 tampoco tiene un concepto de 'aplicación'. – Dziamid

Respuesta

2

Después de unos días de codificación, yo era capaz de hazlo exactamente como yo quería, voy a compartir mi solución:
Comencé con un ejemplo que encontré aquí en SO, puedes leer la publicación aquí:
Symfony sfDoctrineGuardPlugin custom login query me dio una idea y la ejecutó, por lo que yo creo \ lib \ Util.class.php, con las funciones, una para usuarios de back-end de consulta y otra para usuarios de frontend

static public function retrieveCustomer($username, $isActive = true) 
{ 
    $query = Doctrine_Core::getTable('sfGuardUser')->createQuery('u') 
    ->leftJoin('u.Groups g') 
    ->leftJoin('g.Permissions p') 
    ->where('u.username = ?', $username) 
    ->addWhere('u.is_active = ?', $isActive) 
    ->addWhere('g.name = ?', 'customers'); 

    return $query->fetchOne(); 
} 

static public function retrieveAdmin($username, $isActive = true) 
{ 
    $query = Doctrine_Core::getTable('sfGuardUser')->createQuery('u') 
    ->leftJoin('u.Groups g') 
    ->leftJoin('g.Permissions p') 
    ->where('u.username = ?', $username) 
    ->addWhere('u.is_active = ?', $isActive) 
    ->whereIn('g.name', array('administrators','operators')); 

    return $query->fetchOne(); 
} 

ahora, en el app.yml de cada aplicación, puedo reemplazar la consulta por defecto del plugin

#Example for apps/backend/config/app.yml 
all: 
    sf_guard_plugin: 
     retrieve_by_username_callable: Util::retrieveAdmin 

hasta el momento todo era bueno, pero empecé a hacer frente a otro problema, así que abrir un nuevo hilo: Overwriting isAuthenticated() in symfony y no tengo el paso final para mi solución, que se ponía nombre de la sesión differentes para cada aplicación, así, en el factories.yml de cada aplicación:

#apps\backend\config\factories.yml 
storage: 
    class: sfSessionStorage 
    param: 
    session_name: backend 

y ahora todo está preparado, los usuarios de frontend no pueden iniciar sesión en la aplicación de back-end y viceversa.

Siéntase libre de comentar

0

El enfoque más común es a través de credenciales, mis backend aplicaciones security.yml parece:

all: 
    is_secure: on 
    credentials: [login_backend] 
+0

gracias por la respuesta, pero las credenciales se verifican después de que el usuario haya iniciado sesión, no quiero eso, porque puede iniciar sesión, simplemente no puede acceder a esta aplicación, en mi caso, toda mi aplicación frontend no es segura, Solo páginas, si utilizo las credenciales que el usuario parece que están alojadas en la página que no son seguras, y no quiero eso –

Cuestiones relacionadas