Partage
  • Partager sur Facebook
  • Partager sur Twitter

Symfony - filtrage menu rôle annotation méthode

Sujet résolu
    21 septembre 2022 à 8:30:18

    Bonjour,

    Je suis en Symfony 5.4 et avec php 8.0.23

    Je voudrais filtrer un menu fait avec knp-menu-bundle en fonction du rôle de l'utilisateur qui se connecte et de l'attribut de la méthode du contrôleur. Inutile de montrer un item de menu à un utilisateur qui ne pourra pas finalement y accéder.

    Exemple :

    #[Route('/list', name: 'list')]
    #[IsGranted('ROLE_USER')]

    Pour chaque item du menu je récupère la classe et la méthode et je fais :

    $reflectedMethod = new \ReflectionMethod($routeClass, $routeMethod);

    Quand je fais un dump du résultat, j'obtiens (exemple) :

    ReflectionMethod {#18 ▼
      +name: "list"
      +class: "App\Controller\Network\ComputerController"
      returnType: "Symfony\Component\HttpFoundation\Response"
      attributes: array:2 [▼
        0 => ReflectionAttribute {#1500 ▼
          name: "Symfony\Component\Routing\Annotation\Route"
          arguments: array:2 [▼
            0 => "/list"
            "name" => "list"
          ]
        }
        1 => ReflectionAttribute {#1485 ▼
          name: "App\Controller\Network\IsGranted"
          arguments: array:1 [▼
            0 => "ROLE_USER"
          ]
        }
      ]
      extra: {▶}
      modifiers: "public"
    }

    Je voudrai donc récupérer l'attribut IsGranted de la méthode pour le comparer au rôle attribué au user. Je fais :

    $annotationReader = new AnnotationReader();             
    $methodAnnotation = $annotationReader->getMethodAnnotation($reflectedMethod, 'IsGranted');

    Aucune erreur mais $methodAnnotation est null.

    Alors bien-sûr je peux itérer sur attributes pour trouver ce que je cherche mais je pensais que la méthode getMethodAnnotation était la solution adaptée.

    ==> une idée ?

    ... peut-être que la méthode ne concerne que les entités (et pas les contrôleurs) ?

    D'avance merci. A+




    -
    Edité par monkey3d 22 septembre 2022 à 5:29:14

    • Partager sur Facebook
    • Partager sur Twitter
      22 septembre 2022 à 17:22:05

      Je relance.

      J'ai donc fait en itérant sur les attributs et cela fonctionne. Quelques lignes de code.

      Mais je ne vois pas trop alors à quoi sert la méthode getMethodAnnotation. Peut-être ne s'applique t-elle pas à une annotation (attribut) dans le cas d'une méthode d'un contrôleur ?

      A+

      -
      Edité par monkey3d 22 septembre 2022 à 17:22:55

      • Partager sur Facebook
      • Partager sur Twitter
        24 septembre 2022 à 5:41:31

        Sans réponse, je clos le sujet ... avec moi-même. :D

        J'aurai bien aimé savoir comment sur l'objectif de filtrer les items d'un menu selon le rôle de l'utilisateur qui se connecte vous procédiez ?

        Bye

        • Partager sur Facebook
        • Partager sur Twitter

        Symfony - filtrage menu rôle annotation méthode

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown