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 :

Annotation @Security synthaxe


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2020
    Messages : 16
    Points : 12
    Points
    12
    Par défaut Annotation @Security synthaxe
    Bonjour j'aimerai que seulement l'utilisateur propriétaire du profil puisse avoir l'accès à l' edit de son profil mais j'ai visiblement un problème de syntaxe dans l annotation @Security ce que je comprend tout à fait mais je ne vois pas comment faire

    Code erreur :

    Unexpected token "operator" of value ">" around position 34 for expression `is_granted('ROLE_USER') and user->getId === 'id'`.

    Ma fonction avec annotation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        /**
         * @Route("/user/{id}/edit", name="user_edit", methods={"GET","POST"}, requirements={"id"="\d+"})
         * @Security("is_granted('ROLE_USER') and user->getId === 'id'", message="Ce profil ne vous appartient pas, vous ne pouvez pas le modifier.")
         */
        public function editUser(Request $request, UserRepository $userrepository, $id)

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2020
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Pour plus de précisions sur le ligne du @security j'aimerai que le user.id (et non pas le user->getId() comme j'ai marqué) soit égal à l'id de la route pour avec accès à l'edit

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2019
    Messages : 67
    Points : 72
    Points
    72
    Par défaut
    Bonjour,

    Voici un exemple qui fonctionne à condition d'utiliser ParamConverter également :

    Dans ton annotation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    @Route("/edit/{user_id}", name="user_edit")
    @ParamConverter("user", options={"mapping": {"user_id": "id"}})
    @Security("user.isAllowed(user)")
    public function editUser(User $user)
        {
    et dans l'entité User :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function isAllowed(User $user = null)
        {
            return $user && $user->getGetId() === $this->getId();
        }

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Octobre 2018
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Merci PhiMau pour ta réponse je vais tester ça ce soir

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2020
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Alors j'ai adapté mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        /**
         * @Route("/user/{id}/edit", name="user_edit", methods={"GET","POST"}, requirements={"id"="\d+"})
         * @ParamConverter("user", options={"mapping": {"user_id": "id"}})
         * @Security("is_granted('ROLE_USER') and user.isAllowed(user)", message="Ce profil ne vous appartient pas, vous ne pouvez pas le modifier.")
         */
        public function editUser(Request $request, UserRepository $userrepository, $id)
    tout en rajoutant la function dans mon entité user

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        public function isAllowed(User $user = null)
        {
            return $user && $user->getId() === $this->getId();
        }
    Mais malheureusement ça ne restreint pas l'accès à l'édit et je n'ai pas de messages d'erreurs je vois pas où je me suis trompé

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2019
    Messages : 67
    Points : 72
    Points
    72
    Par défaut
    Oui sorry je t'ai envoyé mon code sans l'adapter au tiens

    Euh ça devrait fonctionner pourtant mais on dirait que t'as une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            return $user && $user->getGetId() === $this->getId();
    normalement c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            return $user && $user->getId() === $this->getId();
    Peut-être dans un premier temps si ça fonctionne toujours pas, retire ton IS_GRANTED de l'annotation pour tester étape par étape.

    Et sinon place un die and dump au début de ta méthode isAllowed, uniquement dans le but de vérifier quels sont les id et tenter de débuguer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dd($user->getId() . ' - ' . $this->getId();

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2020
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Aucun soucis PhiMau c'est à moi d'adapter mon code de toute façon t es déjà bien gentils de m'aider je vais tenter un dumper et enlevé mon IS_GRANTED voir si ça règle me problème.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2020
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Donc j'ai enlevé IS_GRANTED et j'ai fait un dd() dans l'entité user et je récupère bien ce qui est attendu vu que je suis connecté avec le user aillant l'id 1 cad :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    User.php on line 116:
    "1 - 1"
    et niveau de mon controller j'ai ça du coups :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /**
         * @Route("/user/{id}/edit", name="user_edit", methods={"GET","POST"}, requirements={"id"="\d+"})
         * @ParamConverter("user", options={"mapping": {"user_id": "id"}})
         * @Security("user.isAllowed(user)", message="Ce profil ne vous appartient pas, vous ne pouvez pas le modifier.")
         */
        public function editUser(Request $request, User $userentity, UserRepository $userrepository, $id)
    Mais j'ai toujours accès à une édition de profil qui n'appartient pas à l'utilisateur

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2019
    Messages : 67
    Points : 72
    Points
    72
    Par défaut
    Si le résultat de ton var_dump est "1 - 1", alors c'est normal que tu accèdes à la page je pense...

    Ca veut dire que l'id du User que tu essayes de modifier est le même id que le user actif (toi).
    Le forbidden se déclenche si l'id est différent.

    le "1 - 1" s'affiche lorsque tu accèdes à un profil différent ?

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Octobre 2018
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Oui j' ai sais que c est normal d avoir accès à l id 1 si je suis connecté en utilisateur 1 j ai fait le test en mettant 2 dans l URL mais ça changeait rien malheureusement. Je referai le test avec le dump en rentrant ce soir. Mais pour l instant que je sois connecté en utilisateur 1 ou 2 j' ai accès à l édition des 2 profils.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2020
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Donc en remettant le dump dans dans mon entité user il me trouve bien 1 pour l'utilisateur 1 - 1 et 2 - 2 pour l'utilisateur 2 donc la fonction récupère bien le l'id de l'utilisateur connecté. Je suppose que le problème doit venir du controller.

Discussions similaires

  1. [Security] Spring Security 3 + Spring 3 MVC Controller Annotation
    Par Axelou dans le forum Spring
    Réponses: 2
    Dernier message: 19/03/2011, 17h40
  2. [VB.NET] System.Security.Permission ....
    Par ludovic85 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 17/10/2006, 11h24
  3. Security Error :s
    Par aeled dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 20/11/2004, 15h24
  4. Synthaxe pour expression comprenant quote avec commande like
    Par loopy4321 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/07/2004, 12h21
  5. [XMLRAD] Security des WebModules et/ou des WebServices
    Par Lux interior dans le forum XMLRAD
    Réponses: 4
    Dernier message: 18/12/2002, 17h09

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