2017-07-04 1 views
0

I definiert einen Wähler, vor allem voteOnAttribute Verfahren wie folgt vor:Symfony Voter Konstante Verwendungen

public function voteOnAttribute($attributes, $subject, TokenInterface $token) { 

     $user = $token->getUser(); 

     if (!$user instanceof User) { 
      return false; 
      // return static::ACCESS_DENIED 
     } 
     if(!$subject instanceof PrivateResource) { 
      throw new Exception('Media type mismatch : private resource expected here'); 
     } 

     // Check company is elligible here 
     if(!$subject->getCompanies()->contains($user->getCompany())){ 
      return false; 
      // return static::ACCESS_DENIED 
     } 

     return static::ACCESS_GRANTED; 
    } 

Warum kann ich nicht verwenden VoterInterface Konstanten (ACCESS_GRANTED, ACCESS_ABSTAIN, ACCESS_DENIED) in meiner Methode?

Wenn ich so, die Zugriff verweigert Entscheidung wegen Methode nicht erzwungen vote in abstrakten Klasse Voter:

public function vote(TokenInterface $token, $subject, array $attributes) 
    { 
     // abstain vote by default in case none of the attributes are supported 
     $vote = self::ACCESS_ABSTAIN; 

     foreach ($attributes as $attribute) { 
      if (!$this->supports($attribute, $subject)) { 
       continue; 
      } 

      // as soon as at least one attribute is supported, default is to deny access 
      $vote = self::ACCESS_DENIED; 

      if ($this->voteOnAttribute($attribute, $subject, $token)) { 
       // grant access as soon as at least one attribute returns a positive response 
       return self::ACCESS_GRANTED; 
      } 
     } 

     return $vote; 
    } 

Als ACCESS_DENIED konstant auf -1 in VoterInterface gesetzt, die if ($this->voteOnAttribute($attribute, $subject, $token)) Bedingung wahr ist, auch wenn return -1 ist.

Was verwechsele ich hier? Sind diese Konstanten in unseren benutzerdefinierten Methoden voteOnAttribute geplant?

Hinweis: Ich habe die Wähler Strategie unanimous in security.yml

Antwort

2

Zuerst dachte ich, dass ich die Dokumentation missunderstood.

Aber es gibt einen Unterschied in der Dokumentation zwischen den symfony-Versionen

vorausgesetzt, Sie symfony> = 2.7 verwenden, sollten Sie Boolesche Werte in voteOnAttribute zurückkehren

Verwandte Themen