Je développe une partie d'une application Web sur Symfony 2. Comme dans de nombreuses applications, l'authentification et l'autorisation sont nécessaires. Comment puis-je continuer à développer, en prenant des considérations en passant ou en faisant semblant de vous connecter? P>
dans les documents, login_check code> L'authentification et les sessions font-elles partie de manière transparente. Je pense que je peux soit avoir besoin de mettre en œuvre une version de cela ou de l'appeler pour vous connecter comme différents utilisateurs / rôles p>
3 Réponses :
Je pense peut-être qu'il est un sens pour que vous puissiez prolonger basseestcase code> à partir de ce paquet et appeler la méthode de connexion, je ne suis pas tout à fait sûr.
Je ne suis pas tout à fait sûr que je comprenne votre question mais vous demandez simplement comment vous vous connectez de manière programmatique?
dans mes tests, je fais simplement un appel comme: p> Cela ne fait pas une connexion complète, mais cela fonctionne avec RBAC et je ne vois pas pourquoi cela ne fonctionnerait pas avec ACL si vous passez un objet utilisateur réel. P> comme pour les tests fonctionnels de mon FRONT END Si j'ai besoin de vous connecter, je viens de naviguer à la page de connexion et de soumettre le formulaire selon les documents de test. Pour que l'un ou l'autre de ceux de travailler, vous avez besoin d'accéder au conteneur afin que vous ayez besoin d'étendre J'ai un sentiment que j'ai mal compris la question (c'est-à-dire que vous devez faire quelque chose de plus complexe que de simplement placer le jeton). Peut-être que vous pourriez essayer de clarifier un peu plus ce que vous entendez par p> Passer ou simuler un identifiant p>
blockQuote> un exemple concret pour planter un jeton de sécurité dans un test: strong> p> Nous faisons d'abord une classe de base pour que nos tests utilisent qui contiennent une méthode de confirmation de connexion . Cela peut être fait en extension de role_fixture_loader code> mais si vous vouliez Connectez-vous comme une entité utilisatrice complète (de sorte qu'ils ont le bon identifiant ACL), vous pouvez obtenir un objet $ utilisateur code> à partir de la base de données et appelez: p> WebtesCase de code> ou de rouler votre propre capacité à démarrer le noyau (voir ICI strong>). P>
webtesecase code> et à l'aide de la méthode getcontainer code> sur un client code> ou que vous pouvez tirer webtescriptique code> à part à Rouler votre propre classe de base qui déclenche simplement le noyau sans client et retourne le conteneur (voir mon Lien pour deux solutions à atteindre Ça). P> namespace Acme\SomeBundle\Tests\Entity;
use Acme\SomeBundle\Tests\AcmeTestCase;
class SomeEntityTest extends AcmeTestCase {
public function somethingTest() {
$this->loginAs(static::createClient(), 'SomeUsernameInDB');
// Do the rest of your test here.
}
}
Je pense que tu as raison, je peux essayer cela plus tard. Je veux juste simuler un login afin que je puisse tester ma logique ACL.
Espérons que cela vous aidera alors :). Pour tester l'ACL, utilisez ma deuxième extrait. Il suffit de recevoir votre $ utilisateur code> de l'entité entitymanager code> ou ou d'abord et transmettez-le sur le jeton comme $ utilisateur code> .
Ok, juste testé ... Je suis actuellement reçois Il n'y a aucun fournisseur d'utilisateur pour l'utilisateur "Bottle \ Bundle \ NotesBundle \ Entité \ utilisateur" code> maintenant. J'ai effectivement créé un faussessertank code> peut-être que je suis peut-être simplement utiliser le nom d'utilisateurpasswordToken? J'essayais d'être aussi proche que possible de la vraie chose où je peux obtenir l'utilisateur de LoggedIn. Comment puis-je faire cela avec userNamePasswordToken code>?
Salut, userneamepasswordToken code> est ce que vous devez utiliser, il peut être adopté un objet de l'utilisateur réel qui implémente userinterface code> - c'est le jeton que symfony2 utilise pour former la connexion autant que je sache . Je dois sortir, mais quand je reviens, je vais mettre à jour la réponse avec une solution plus complète qui pourrait aider.
J'ai posté quelques autres code qui sauront, espérons-le, publier si cela ne sera pas et peut-être qu'il y aura une autre solution.
C'est sécurité.token_storage code> au lieu de Security.Context Code> dans les versions récentes de Symfony.
Je ne sais pas très bien votre question, mais si vous souhaitez simplement voir l'application avec un rôle d'utilisateur différent, vous pouvez utiliser le sélecteur de rôle Symfony documenté ici: http://symfony.com/doc/current/book/security .html # IMPASSONATINE-A-UTILISATEUR P>
Vous devez donc simplement mettre un paramètre dans votre URL pour afficher votre application sous forme d'un autre utilisateur connecté. P>
J'espère que cela aide! p>
Je crois que pour cela, je dois me connecter comme administrateur d'abord