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 :

Assigner des roles a un utilisateur. [2.x]


Sujet :

Symfony PHP

  1. #1
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut Assigner des roles a un utilisateur.
    Bonjour,

    Je sais que le sujet a été discuté plusieurs fois, mais aucune solution ne semble fonctionner, ou ne me convient.
    La plupart d'entre elles sont très complexe, trop pour quelque chose d'aussi simple je pense, et donc je trouve bizarre que l'on ne puisse pas faire mieux.

    J'avais trouvé cette méthode :
    http://stackoverflow.com/questions/1...class-in-symfo

    Qui me plaisait pas mal. Elle devait m'afficher une liste de checkbox pour donner des rôles à un utilisateur.
    Seulement, il semble impossible de passer une option personnelle au formulaire.

    j’obtiens l'erreur suivante :
    The option "roles" does not exist. Known options are: "attr", "block_name", "by_reference", "cascade_validation", "compound", "constraints", "csrf_field_name", "csrf_protection", "csrf_provider", "data", "data_class", "disabled", "empty_data", "error_bubbling", "error_mapping", "extra_fields_message", "intention", "invalid_message", "invalid_message_parameters", "label", "label_attr", "mapped", "max_length", "pattern", "post_max_size_message", "property_path", "read_only", "required", "translation_domain", "trim", "validation_constraint", "validation_groups", "virtual"
    Bref, je cherche une autre solution.

    Est ce que vous avez un bon tuto quelque part qui expliquerait comment ajouter dans un bête formulaire d'utilisateurs des checkbox / select qui permettent de sélectionner le rôle d'un utilisateur.
    J'aimerai que ca utilise directement la colonne ROLE présente par défaut dans symfony, sans en créer une autre.(et donc que ca soit compatible avec les commandes console de fos_user).

    Ca parait très stupide comme ca, mais ca fait 1h30 que je bloque et je ne trouve rien de valable sur le net.

    Mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            $editForm = $this->createForm(new UserType(), $entity, array('roles' => $this->container->getParameter('security.role_hierarchy.roles')));
    merci,
    Pierre

  2. #2
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut
    Bon, j'ai la solution...

    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
     
    public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('username')
                ->add('roles', 'choice', array(
                    'required' => true,
                    'multiple' => true,
                    'choices' => $this->refactorRoles($options['roles'])
                ))
            ;
        }
     
        public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'Tsm\UserBundle\Entity\User',
                'roles' => null
            ));
        }
     
        private function refactorRoles($originRoles)
        {
            $roles = array();
            foreach ($originRoles as $roleParent => $rolesHerit){
                $roles[$roleParent] = $roleParent;
            }
            return $roles;
        }
    and in the controller
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $editForm = $this->createForm(new UserType(), $entity, array('roles' => $this->container->getParameter('security.role_hierarchy.roles')));
    the trick was to add the option in the default function.

    Last question now is to be able to restrict the element displayed on the form.

    Admin can access the user form, but I don't want them to be able to give SUPER_ADMIN role.

    Any idea on how to do it ?
    Thanks
    Pierre

  3. #3
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut
    J'ai trouvé aussi...

    voici donc l'astuce :
    1 : créer un service
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    services:
        form.type.user:
            class: Monapp\UserBundle\Form\UserType
            arguments: ["@security.context"]
            tags:
                - { name: form.type, alias: user_type }
    2 : ajouter un constructeur et le security context dans la classe UserType
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    use Symfony\Component\Security\Core\SecurityContext;
    class UserType extends AbstractType
    {
        private $securityContext;
     
        public function __construct(SecurityContext $securityContext)
        {
            $this->securityContext = $securityContext;
        }
    3 : importer le formulaire en utilisant le service.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $editForm = $this->createForm($this->get('form.type.user'), $entity, array('roles' => $this->container->getParameter('security.role_hierarchy.roles')));
    je suis dailleur en train de me dire que je pourrais surement faire ca plus proprement en important les roles de la même façon, mais bon, je verrai cela plus tard.

    Merci,
    Pierre

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

Discussions similaires

  1. [SBI] affecter des roles à un groupe d'utilisateurs
    Par youyou123 dans le forum SpagoBI
    Réponses: 0
    Dernier message: 17/04/2009, 16h05
  2. gestion des roles utilisateur
    Par EAKOM dans le forum Seam
    Réponses: 2
    Dernier message: 28/03/2009, 12h39
  3. Réponses: 0
    Dernier message: 17/02/2009, 11h16
  4. Réponses: 2
    Dernier message: 06/07/2008, 18h19
  5. GUI en fonction des "roles" des utilisateurs
    Par mrshadow dans le forum Eclipse Platform
    Réponses: 5
    Dernier message: 18/04/2008, 10h33

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