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 :

implements RoleInterface problème [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 107
    Points : 67
    Points
    67
    Par défaut implements RoleInterface problème
    Salut,

    j'ai un petit soucis au niveau de la gestion des rôles,

    j'ai donc un objet user qui contient un id, mail et un objet Roles (qui implements Symfony\Component\Security\Core\Role\RoleInterface),
    au moment de l'authentification si l'user n'existe pas je veut lui assigné un rôle par défaut.
    Donc je récupère un objet Roles de ma base de donnée et je set ma variable $roles dans l'user et je persist et flush (doctrine 2).
    Et là j'ai une erreur comme quoi je set un objet et qu'il attend soit un array de string ou une instance de RoleInterface.
    J'ai essayé de faire un instanceOf($role) et il me return false alors que ma class l'implement bien... (j'ai bien vérifier c'est pourtant bien mon Objet Roles)
    Une idée ?

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    <?php
     
    namespace IMAG\LdapBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Component\Validator\Constraints as Assert;
     
    use Symfony\Component\Security\Core\Role\RoleInterface;
     
    /**
     * @orm\Entity
     * @orm\Table(name="roles")
     */
    class Roles implements RoleInterface
    {
        /**
         * @orm\Id
         * @orm\GeneratedValue(strategy="AUTO")
         * @orm\Column(type="integer")
         */
        private $id;
     
        /** @orm\Column(type="string", length=40, nullable=true) */
        private $nom;
     
        /**
         * @var IMAG\LdapBundle\Entity\LdapUser
         * @orm\ManyToMany(targetEntity="LdapUser", inversedBy="Roles")
         * @orm\JoinTable(name="user_role",
         *      joinColumns={@orm\JoinColumn(name="user_id", referencedColumnName="id")},
         *      inverseJoinColumns={@orm\JoinColumn(name="role_id", referencedColumnName="id")}
         * )
        */
        private $LdapUser;
     
        public function __construct()
        {
        }
     
        public function getId() {
          return $this->id;
        }
     
        public function setId($id) {
          $this->id = $id;
        }
     
        public function getNom() {
          return $this->nom;
        }
     
        public function setNom($nom) {
          $this->nom = $nom;
        }
     
        public function getLdapUser() {
            return $this->LdapUser;
        }
     
        public function setLdapUser($LdapUser) {
            $this->LdapUser = $LdapUser;
        }
     
        public function getRole() {
            return $this->nom;
        }
     
     
    }
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    <?php
     
    namespace IMAG\LdapBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Component\Validator\Constraints as Assert;
     
    use Symfony\Component\Security\Core\User\UserInterface,
      IMAG\LdapBundle\Manager\LdapManagerInterface;
    use IMAG\LdapBundle\Entity\Roles;
     
    /**
     * @orm\Entity
     * @orm\Table(name="users")
     */
    class LdapUser implements UserInterface
    {
      /**
         * @orm\Id
         * @orm\GeneratedValue(strategy="AUTO")
         * @orm\Column(type="integer")
         */
        private $id;
     
        /** @orm\Column(type="string", length=40) */
        private $mail;
     
        private $nom;
     
        private $prenom;
     
        /**
        * @var Doctrine\Common\Collections\ArrayCollection
        * @orm\ManyToMany(targetEntity="Roles", mappedBy="LdapUser")
        * @orm\JoinTable(name="user_role",
        *      joinColumns={@orm\JoinColumn(name="user_id", referencedColumnName="id")},
        *      inverseJoinColumns={@orm\JoinColumn(name="role_id", referencedColumnName="id")}
        * )
        */
        private $Roles;
     
      public function __construct()
      {
      }
     
      public function init($ldapResult, $em){
    $role = $em->getRepository('IMAGLdapBundle:Roles')->findOneBy(array('nom' => 'ROLE_Non_defini'));
    $this->setRoles($role);
     
             $em->persist($this);
             $em->flush();

  2. #2
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 107
    Points : 67
    Points
    67
    Par défaut
    J'ai un peu de neuf a donner mais alors c'est vraiment bizarre !

    Quand dans une entité de mon Bundle que je fait un implements RoleInterface et que je place ma classe LdapUser dans mon vendor. Si je fait un instanceof($monEntité) il me retourne bien true dans mon LdapUser.

    Quand je le fait avec mon Objet Rôle (dans mon vendor) il me retourne false.

    J'ai essayé de déplacer les 2 dans mon UserBundle ça me retourne false.

    Et quand je met mon objet Rôle dans mon Bundle et mon LdapUser dans mon Vendor j'ai une erreur à la création du schema doctrine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Warning: class_parents(): Class Societe\UserBundle\Entity\LdapUser does not exist and could not be loaded in C:\wamp\www\CPWeb\vendor\doctrine\lib\Doctrine\ORM\Mapping\ClassMetadataFactory.php line 223
    C'est étrange car j'ai bien vérifier plusieurs fois et à aucun moment je fait un lien vers Societe\UserBundle\Entity\LdapUser
    .
    Je pense donc que l'user et le role doivent se retrouver au même endroit pour ne pas avoir de problème (au niveau de doctrine) et il se passe quelque chose qui fait que je perd mon intance de RoleInterface dans mon LdapUser. (je me demande comment c'est possible)

  3. #3
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 107
    Points : 67
    Points
    67
    Par défaut
    Bon ben autant pour moi j'ai du faire un truk quelque part qui va pas car je suis revenu sur mon ancienne version j'ai refait ça proprement et mes instanceof paraisse plus cohérents...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Problème d'implementation de graphe (theorie des graphes inside)
    Par cappadocien dans le forum MATLAB
    Réponses: 2
    Dernier message: 13/10/2008, 16h27
  2. [POO] Problème avec extends + implements ?
    Par Alp dans le forum Langage
    Réponses: 1
    Dernier message: 04/07/2008, 20h42
  3. Problème d'implementation et de conception
    Par Invité1 dans le forum C#
    Réponses: 7
    Dernier message: 14/05/2008, 00h29
  4. probléme Oregano implementation d'interface
    Par ouss dans le forum Langage
    Réponses: 2
    Dernier message: 27/02/2007, 10h54
  5. problème avec la directive implements
    Par Bruno75 dans le forum Langage
    Réponses: 2
    Dernier message: 14/10/2005, 09h02

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