私はボーター、特にvoteOnAttribute
次のようなメソッドを定義しました:
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;
}
メソッドでVoterInterface
定数 ( ACCESS_GRANTED
、ACCESS_ABSTAIN
、 )を使用できないのはなぜですか?ACCESS_DENIED
vote
私がそうすると、抽象クラスのメソッドのために、アクセス拒否の決定は強制されません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;
}
ACCESS_DENIED
では定数が -1 に設定されているためVoterInterface
、if ($this->voteOnAttribute($attribute, $subject, $token))
return が -1 であっても条件は true です。
ここで何を間違えていますか?voteOnAttribute
これらの定数は、カスタムメソッドで使用する予定ですか?
注:有権者戦略をに設定しunanimous
ましたsecurity.yml