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

Langage PHP Discussion :

Autorisation accès ADMIN avec le Voter


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Junior
    Inscrit en
    Septembre 2021
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Junior

    Informations forums :
    Inscription : Septembre 2021
    Messages : 70
    Par défaut Autorisation accès ADMIN avec le Voter
    Bonjour,

    J'ai un problème sur mon site, plus précisément le fait d'autoriser pour un ROLE ADMIN à éditer et supprimer des topics et messages d'autres utilisateurs.

    J'ai seulement deux roles, ROLE_USER et ROLE_ADMIN. A chaque création d'un compte, un ROLE USER lui est automatiquement attribué. Configuration de base de Symfony quand je fais un Make:user

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public function getRoles(): array
        {
            $roles = $this->roles;
            // guarantee every user at least has ROLE_USER
            $roles[] = 'ROLE_USER';
     
            return array_unique($roles);
        }
    Pour mon entité Subject, j'ai crée un Voter qui autorise seulement l'auteur de la question à éditer/supprimer son sujet. Jusque là OK.

    Le problème maintenant est que quand je veux autoriser cette action pour l'admin avec pour conditions dans le SubjectVoter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(in_array($user->getRoles(), ['ROLE_ADMIN', 'ROLE_USER'])){
                        return true;
                    }
    Je ne suis pas autorisé en tant qu'admin à accéder à la page d'édition du sujet en question.

    Dans le profiler sur mon compte ADMIN j'ai bien mes roles respectifs

    Nom : Capture.PNG
Affichages : 112
Taille : 3,1 Ko

    Je vous remercie d'avance pour l'aide apportée

  2. #2
    Membre confirmé
    Homme Profil pro
    Junior
    Inscrit en
    Septembre 2021
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Junior

    Informations forums :
    Inscription : Septembre 2021
    Messages : 70
    Par défaut
    Je me permets de relancer le sujet, n'ayant toujours pas trouver le moyen d'autoriser l'édition et la suppression sur tous les sujets des utilisateurs pour l'admin.


    EDIT : Dans la dernière capture, j'ai un Inherited Roles à none alors que dans l'access control dans Security.yaml j'ai mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    role_hierarchy:
            ROLE_ADMIN: ROLE_USER

  3. #3
    Membre confirmé
    Homme Profil pro
    Junior
    Inscrit en
    Septembre 2021
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Junior

    Informations forums :
    Inscription : Septembre 2021
    Messages : 70
    Par défaut
    J'ai retourné la logique dans tous les sens je vois vraiment pas ce qui bloque.

    Dans mes access_control pour l'édition et la suppression d'un sujet j'ai ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    - { path: ^/sujet/\d+/(edit|delete), roles: ROLE_USER }
    Mème si j'ai mis seulement ROLE_USER l'admin devrait pouvoir quand même y accéder vu qu'il hérite de ROLE_USER.

    Et dans le Voter j'ai bien mis la dans la case edit que si l'user est à la fois ROLE_USER et ADMIN il peut éditer.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    switch ($attribute) {
                case 'edit':
                    // C'est ici qu'on teste les droits d'édition sur $subject
                    // Si l'auteur de la question est l'utilisateur connecté, on autorise à le droit d'édition
                    if ($subject->getUsers() == $user){
                        return true;
                    }
     
                    if (in_array($user->getRoles(), ['ROLE_ADMIN', 'ROLE_USER'])){
                        return true;
                    }

  4. #4
    Membre confirmé
    Homme Profil pro
    Junior
    Inscrit en
    Septembre 2021
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Junior

    Informations forums :
    Inscription : Septembre 2021
    Messages : 70
    Par défaut
    J'ai pu trouvé la solution.

    Ajouter dans le Voter une méthode constructeur avec en paramètre la class Security

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private $security;
     
        public function __construct(Security $security)
        {
            $this->security = $security;
        }
    Ajouter cette condition dans le if

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ($this->security->isGranted('ROLE_ADMIN')) {
                        return true;
                    }

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/10/2019, 14h09
  2. Réponses: 0
    Dernier message: 24/07/2019, 15h24
  3. organisation d'admin avec droits d'accès restreints
    Par artichaudd dans le forum Langage
    Réponses: 4
    Dernier message: 29/11/2010, 19h36
  4. Bloquer accès hacker avec Apache
    Par scoubi38 dans le forum Réseau
    Réponses: 2
    Dernier message: 21/12/2004, 09h30
  5. acces concurrent avec delphi 5 entreprise
    Par Jean_paul dans le forum Bases de données
    Réponses: 2
    Dernier message: 30/11/2004, 20h19

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