IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

ACL et fixtures


Sujet :

Symfony PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 104
    Points : 88
    Points
    88
    Par défaut ACL et fixtures
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 104
    Points : 88
    Points
    88
    Par défaut
    Pour le problème rencontré dans la 2ème méthode c'est en fait un problème de compatibilité entre doctrine 2 et les ACLs.

    Ce problème est connu et n'a toujours pas de solution :
    https://github.com/symfony/symfony/pull/2056

    Pour faire court, lorsque Doctrine 2 utilise le lazy loading, donc remplace une classe par une classe proxy (la doc ici http://www.doctrine-project.org/docs...#proxy-objects) la méthode renvoie la classe proxy au lieu de la classe de notre objet.

    Un petit hack pour récupérer la bonne classe en attendant une solution définitive:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $securityIdentity = ($user instanceof \Doctrine\ORM\Proxy\Proxy ? new UserSecurityIdentity($user->getUsername(),  get_parent_class($user)) : new UserSecurityIdentity($user->getUsername(),  get_class($user)));
    (pareil avec ObjectIdentity )


    Voilà, sinon je ne passe pas le post en résolu car je recherche toujours des avis de personnes sur l'utilisation des fixtures et des ACLs. Comment vous y prenez vous ?

    Merci

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/05/2006, 11h42
  2. [ACL][SESSION]
    Par tyrann dans le forum Modules
    Réponses: 18
    Dernier message: 03/03/2006, 10h26
  3. [Calendrier] Multi-utilisateurs en php avec les ACL
    Par moabomotal dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 06/12/2005, 17h51
  4. [pseudo ACL] Event de ctrl d'accès d'1 ou +zieurs dossiers
    Par argyronet dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/10/2005, 14h10
  5. droits ACL et réseaux
    Par dips dans le forum Windows
    Réponses: 4
    Dernier message: 02/09/2004, 13h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo