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 ?
Réponses
Trop de publicités?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();
}
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 :
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é.