0

私はボーター、特に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_GRANTEDACCESS_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 に設定されているためVoterInterfaceif ($this->voteOnAttribute($attribute, $subject, $token))return が -1 であっても条件は true です。

ここで何を間違えていますか?voteOnAttributeこれらの定数は、カスタムメソッドで使用する予定ですか?

注:有権者戦略をに設定しunanimousましたsecurity.yml

4

1 に答える 1

2

まず、ドキュメントを誤解していると思いました。

しかし、symfony のバージョン間のドキュメントには違いがあります

symfony >= 2.7 を使用していると仮定すると、voolean 値を voteOnAttribute で返す必要があります

于 2017-09-16T11:06:54.487 に答える