3 votes

Requête de connexion personnalisée Symfony sfDoctrineGuardPlugin

J'utilise le plugin symfony sfDoctrineGuardPlugin pour gérer l'authentification des utilisateurs du front-end et du back-end. Tout va bien, sauf que je ne veux pas que les utilisateurs du front-end puissent se connecter à l'application du back-end. Je peux configurer les informations d'identification, mais celles-ci sont vérifiées après l'authentification de l'utilisateur. Ce que je veux, c'est que le formulaire d'ouverture de session ne soit jamais validé pour un utilisateur qui n'est pas dans un groupe backend. Comment puis-je faire cela ?

2voto

Dziamid Points 3735

Je pense avoir trouvé une meilleure solution. Le plugin sfDoctrineGuard a son propre validateur de post qui vérifie la présence d'un callable optionnel pour le retour de l'utilisateur.

//app.yml
all:
  sf_guard_plugin:
    retrieve_by_username_callable: sfGuardUser::getForBackend

//sfGuardUser.class.php

  public static function getForBackend($username)
  {
    $query = Doctrine::getTable('sfGuardUser')->createQuery('u')
      ->leftJoin('u.Groups g')
      ->leftJoin('g.Permissions p')
      ->where('u.username = ? OR u.email_address = ?', array($username, $username))
      ->addWhere('u.is_active = ?', true)
      ->addWhere('p.name = ?', 'backend');

    return $query->fetchOne();
  }

0voto

Tom Points 10295

Voici une idée : vous pourriez essayer de créer un post-validateur personnalisé pour le formulaire de connexion. Voici un résultat de Google :

http://www.symfony-project.org/blog/2008/09/05/call-the-expert-how-to-implement-a-conditional-validator

Dans ce validateur, vous pourriez vérifier si l'utilisateur appartient au groupe en question, puis lancer une erreur en conséquence. L'utilisateur ne serait pas authentifié.

0voto

Julien Points 1

Je pense que tu dois juste ajouter :

  storage:
    class: sfSessionStorage
    param:
      session_name: sf_backend

à la fin de votre backend/config/factories.yml Par défaut, symfony partage les cookies de session, avec cette solution, symfony sépare ces cookies.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X