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 :

[Sf5 - Api Platform] $subject null dans mes voters


Sujet :

Symfony PHP

  1. #1
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Points : 142
    Points
    142
    Par défaut [Sf5 - Api Platform] $subject null dans mes voters
    Bonjour,

    Je vais un backend en Symfony 5.2 avec Api Platform. J'ai créé un voter pour autoriser sur condition les utilisateurs à effectuer les opérations qui correspondent à leurs permissions sur l'entité Business. Hier tout marchait bien. Quand dans le voter je fais dd($attribute) ou dd($subject), j'ai le résultat correspondant. Aujourd'hui je ne comprends pas ce qui s'est passé et mes voters ne marchent plus. $subject renvoie maintenant null. Voici mes codes:

    // Business.php

    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
     
    <?php
     
    /**
     * @ApiResource(
     *      collectionOperations={
     *          "post"={
     *              "denormalization_context"={
     *                  "groups"={"post-business"}
     *              },
     *              "security"="is_granted('ROLE_CREATE_REALESTATE_BUSINESS', object)"
     *          }
     *      }
     * )
     */
    class Business
    {
        /**
         * @ORM\Id()
         * @ORM\GeneratedValue()
         * @ORM\Column(type="integer")
         * @Groups({"get-business"})
         */
        private $id;
     
        /**
         * @ORM\Column(type="string", length=255)
         * @Groups({"get-business"})
         */
        private $name;
     
        // .....
    }
    BusinessVoter.php

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    <?php
    namespace App\Security\Voter;
     
    use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
    use Symfony\Component\Security\Core\Authorization\Voter\Voter;
    use Symfony\Component\Security\Core\User\UserInterface;
    use Symfony\Component\Security\Core\Security;
    use App\Repository\BusinessAdminRepository;
     
    class BusinessVoter extends Voter
    {    
        private $security;
     
        private $adminRepository;
     
        public function __construct(Security $security, BusinessAdminRepository $adminRepository)
        {
            $this->security = $security;
     
            $this->adminRepository = $adminRepository;
        }
     
        protected function supports($attribute, $subject)
        {
            dd($subject);
            return in_array($attribute, [
                "ROLE_CREATE_REALESTATE_BUSINESS",
                // ...
            ])
                && $subject instanceof \App\Entity\Business;
        }
     
        protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
        {
            // dd($subject);
     
            $user = $token->getUser();
            // if the user is anonymous, do not grant access
            if (!$user instanceof UserInterface) {
                return false;
            }
     
            // ... (check conditions and return true to grant permission) ...
            switch ($attribute) {
                case 'ROLE_CREATE_REALESTATE_BUSINESS':
                    if($this->security->isGranted(strtoupper($subject->getBusinessType()->getMinimumRole())))
                    {
                        return true;
                    }
                    return false;
                break;
     
                // ...
            }
     
            return false;
        }
    }
    Je remercie d'avance pour vos coups de pousse pour résoudre ce problème.

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    Points : 582
    Points
    582
    Par défaut
    Salut,

    Remplace security par security_post_denormalize dans l'annotation de ta ressource Business et ça devrait fonctionner !

    Explication (source) :
    When using Voters on POST methods [...] the object does not exist before denormalization (it is not created, yet.)

  3. #3
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Points : 142
    Points
    142
    Par défaut
    Ca a marché. Merci beaucoup

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

Discussions similaires

  1. SF5 Api Platform
    Par Shandler dans le forum Symfony
    Réponses: 5
    Dernier message: 24/11/2022, 11h28
  2. [Oracle] Recherche nulle dans une base et affichage
    Par GLDavid dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/04/2006, 01h01
  3. Date nulle dans une requete paramétrée avec TParameter
    Par denrette dans le forum Bases de données
    Réponses: 3
    Dernier message: 16/06/2004, 08h37
  4. recherche Date nulle dans une table
    Par lol_adele dans le forum Bases de données
    Réponses: 6
    Dernier message: 16/04/2004, 14h06
  5. Passer une valeur Null dans un argument de procédure
    Par preempalver dans le forum VBA Access
    Réponses: 5
    Dernier message: 30/12/2003, 20h52

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