Bonjour,
j'ai commencé à utiliser les ACL, mais j'ai un problème avec les fixtures. Lorsque je charge les fixtures de doctrine, je dois aussi charger les ACL/ACE correspondants.
1ere solution:
-je charge d'abord les fixtures
php app/console doctrine:fixtures:load
-puis j'installe les ACE par une commande comme dans:
https://github.com/FriendsOfSymfony/...cesCommand.php
Ca marche mais c'est pas top, il m'arrive souvent de recharger les fixtures et donc j'oublie souvent de réinstaller les ACL/ACE..
2ème solution
Je modifie ma fonction load($manager) dans ma classe Fixtures pour installer les ACL/ACE correspondants.
Ca m'a l'air la solution de facilité seulement elle marche pas chez moi. Il faut charger à chaque fois l'utilisateur, pour chaque objet que l'on enregistre. Mon code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
class ProfileFixtures extends AbstractFixture implements OrderedFixtureInterface, ContainerAwareInterface
{
private $container;
public function setContainer(ContainerInterface $container = null)
{
$this->container = $container;
}
public function load($manager)
{
$profileManager = $this->container->get('myapp_individual.manager.profile');
$individual = $this->getReference('individual-1');
$token = new UsernamePasswordToken($individual, null, 'main');
$this->container->get('security.context')->setToken($token);
$profile1 = $profileManager->createProfile($individual);
$profile1->setLastName('Benz');
$profile1->setFirstName('John');
$profile1->setPath('john.jpg');
$profileManager->setProfile($profile1,false);
..... |
Sauf qu'ensuite les ACE ne marchent pas.
Après un peu de recherche j'ai trouvé la source du problème, c'est le
UserSecurityIdentity::fromAccount
qui ne donne pas le même résultat dans les fixtures :
"Proxies\MyAppUserBundleEntityIndividualProxy-john@email.com" et sur le site directement:
"MyApp\UserBundle\Entity\Individual-john@email.com"
(source Ma base de données)
Donc si vous avez des avis à donner sur les 2 solutions? Qu'utilisez vous ?
Et surtout si vous savez comment faire marcher la 2ème solution??
Merci
Partager