symfonysymfony-voter

Symfony Voter supports method receiving ROLE and Request instead attribute and entity


The Voter seems to work on my whole app... except on this controller:

 $entity = $em->getReference('AppBundle:Offer',$id);
 $this->denyAccessUnlessGranted('overview', $entity);

Where this Voter method is receiving wrong arguments ....

supports($attribute, $subject)

dump($attribute)-> ROLE_USER // instead 'overview'
dump($subject)-> Request Object // instead $entity

The Voter config is:

app_voter:
    class:      AppBundle\Security\Authorization\AppVoter
    public:     true
    strategy: affirmative
    arguments: ['@role_hierarchy', '@security.token_storage']
    tags:
        - { name: security.voter }

The problem disappears if instead 'overview' I write 'view' on the controller code.


Solution

  • I forgot to add 'overview' to the method 'supports' :

      protected function supports($attribute, $subject) {
            // if the attribute isn't one we support, return false
            if (!in_array($attribute, array(self::OVERVIEW, self::VIEW, self::EDIT))) {
                return false;
            }
    
            // bypass if the entity is not supported
            if (!$this->isSupportedClass($subject)) {
                return true;
            }
            return true;
        }