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 :

gestion des roles utilisateur dans l'entité User de base du composant securité de Symfony


Sujet :

Symfony PHP

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Points : 305
    Points
    305
    Par défaut gestion des roles utilisateur dans l'entité User de base du composant securité de Symfony
    Salut à tous,

    Après avoir mis en place un système d'authentification grâce au composant Securité de Symfony à l'aide d'une base MySQL et d'un champs Roles codé en dur j'aimerais maintenant gérer les roles correctement et utiliser les données en base.

    Mais après la définition de mon entity en ce sens, j'ai une erreur unserialize que me revoit Symfony.

    Je n'arrive pas à trouver des informations claire et precise sur comment implémenter ou définir correctement mon champs et mes methodes getters/setters pour cet attribut roles d'un utilisateur.

    Si vous avez quelque piste à me fournir je vous en remercie d'avance


    voici le gist de mon entité User : Gist : Entity User


    PS : je ne souhaite pas utiliser le bundle FOSUser...

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    En ce qui concerne les roles, tu dois créer une class qui implémente RoleInterface. Voici un exemple ci-dessous.

    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
    namespace compagnie\CRUDBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
    use \Symfony\Component\Security\Core\Role\RoleInterface;
     
    /**
     * @ORM\Entity
     * @ORM\Table(name="SysRoles")
     */
    class SysRole implements RoleInterface {
     
        /**
         * @ORM\Id
         * @ORM\Column(type="integer")
         * @ORM\GeneratedValue(strategy="AUTO")
         *
         * @var integer $id
         */
        protected $id;
     
        /**
         * @ORM\Column(type="string", length=255, unique=true)
         *
         * @var string $name
         */
        protected $name;
     
        /**
         * @ORM\Column(type="string", length=255, unique=true)
         *
         * @var string $description
         */
        protected $description;
    }
    Le role doit absolument avoir un attribut name. Bien entendu, il faut encore créer les Setters et les Getters et sommes obligé de réécrire les méthodes getRole(), __toString(), serialize() et unserialize() dans les entités User et Role. Voici un exemple concernant l'entité Role :

    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
     
    /**
    * Implementation of getRole for the RoleInterface.
    *
    * @return string The sysrole.
    */
    public function getRole() {    
        return $this->getName();
    }
    public function __toString(){
        return $this->getName();
    }
     
    /**
    * Renvoie l'objet au format serialisé
    * @return string
    */
    public function serialize()    
        return \json_encode(array($this->id, $this->name, $this->
    }
     
    /**
    * Renseigne les valeurs de l'objet à partir d'une chaine serialisée
    * @param type $serialized
    */
    public function unserialize($serialized) {
        list($this->id, $this->name, $this->description) = \json_decode($
    }
    Côté entité User ta variable $role doit ressembler à ceci avec les annotations Doctrine et dans l'obligation d'implémenter une méthode getRoles() :
    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
     
    /**
     * @ORM\ManyToMany(targetEntity="SysRole")
     * @ORM\JoinTable(name="SysUsers_SysRoles",
     *     joinColumns={@ORM\JoinColumn(name="sysusers_id", referencedColumnName="id")},
     *     inverseJoinColumns={@ORM\JoinColumn(name="sysroles_id", referencedColumnName="id")}
     * )
     *
     * @var ArrayCollection $userRoles
     */
     protected $sysUserSysRoles;
     
    /**
     * Gets an array of sysroles.
     *
     * @return array An array of SysRole objects
     */
    public function getRoles() {
        return $this->getSysUserSysRoles()->toArray();
    }
    Bien entedu, tu aurais trois tables dans ta base de données, une pour les utilisateurs, une pour les roles et une qui fait le lien pour les deux. Ce sera une relation dite "plusieurs à plusieurs" dans un format Modèle Conceptuel de Données en UML pour la relation User <---> Role.

    J’espère avoir pu t'aider

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Points : 305
    Points
    305
    Par défaut
    Malheureusement l'ensemble de ta réponse est un peu hors-sujet par le fait que mon système ce base sur une seule Entity User alors que ta réponse tourne autour d'un système à plusieurs Entity, ce que je ne souhaite pas.

    J'en suis donc le premier désolé, je pensais que mon simple code de mon Entity User serait assez clair.

    Il semblerait que mon soucis provienne d'une mauvaise interprétation des données encodé par symfony dans la base que je rempli manuellement. Je vais donc passer par le système des fixtures afin de créer des données de test conforme au différents encodage de données qui produit symfony pendant l’exécution.

    Ta réponse n'est toutefois pas si inutile que cela car c'est effectivement une bonne pratique que tu proposes. Mais avant que mon site grossisse et que j'arrive à obtenir un système unique de securité à une seule Entity je ne vais pas me lancer à faire quelque chose de plus complexe. Mais surement dans le futur oui

    Je te tiendrais au courant concernant l'avancé de mon problème et te remercie de ta contribution

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 168
    Points : 219
    Points
    219
    Par défaut
    Si tu passes les roles dans la function serialize ça passe pas?

Discussions similaires

  1. Réponses: 0
    Dernier message: 08/03/2015, 19h12
  2. Réponses: 0
    Dernier message: 01/03/2015, 20h52
  3. Découvrez la nouvelle gestion des interfaces utilisateurs dans Unity 4.6 : les boutons
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 22/02/2015, 20h03
  4. Réponses: 2
    Dernier message: 27/10/2011, 10h30
  5. gestion des roles utilisateur
    Par EAKOM dans le forum Seam
    Réponses: 2
    Dernier message: 28/03/2009, 12h39

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