* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authorization\Strategy; use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface; /** * Grants access if only grant (or abstain) votes were received. * * If all voters abstained from voting, the decision will be based on the * allowIfAllAbstainDecisions property value (defaults to false). * * @author Fabien Potencier * @author Alexander M. Turek */ final class UnanimousStrategy implements AccessDecisionStrategyInterface, \Stringable { public function __construct( private bool $allowIfAllAbstainDecisions = false, ) { } public function decide(\Traversable $results): bool { $grant = 0; foreach ($results as $result) { if (VoterInterface::ACCESS_DENIED === $result) { return false; } if (VoterInterface::ACCESS_GRANTED === $result) { ++$grant; } } // no deny votes if ($grant > 0) { return true; } return $this->allowIfAllAbstainDecisions; } public function __toString(): string { return 'unanimous'; } }