Chris@0:
Chris@0: *
Returns static::DENY if any of the rules evaluated to static::DENY
Chris@0: * Returns static::ALLOW if at least one of the rules evaluated to
Chris@0: * static::ALLOW and none to static::DENY
Chris@0: * Otherwise returns NULL
Chris@0: *
Chris@0: */
Chris@0: class ChainRequestPolicy implements ChainRequestPolicyInterface {
Chris@0:
Chris@0: /**
Chris@0: * A list of policy rules to apply when this policy is evaluated.
Chris@0: *
Chris@0: * @var \Drupal\Core\PageCache\RequestPolicyInterface[]
Chris@0: */
Chris@0: protected $rules = [];
Chris@0:
Chris@0: /**
Chris@0: * {@inheritdoc}
Chris@0: */
Chris@0: public function check(Request $request) {
Chris@0: $final_result = NULL;
Chris@0:
Chris@0: foreach ($this->rules as $rule) {
Chris@0: $result = $rule->check($request);
Chris@0: if ($result === static::DENY) {
Chris@0: return $result;
Chris@0: }
Chris@0: elseif ($result === static::ALLOW) {
Chris@0: $final_result = $result;
Chris@0: }
Chris@0: elseif (isset($result)) {
Chris@0: throw new \UnexpectedValueException('Return value of RequestPolicyInterface::check() must be one of RequestPolicyInterface::ALLOW, RequestPolicyInterface::DENY or NULL');
Chris@0: }
Chris@0: }
Chris@0:
Chris@0: return $final_result;
Chris@0: }
Chris@0:
Chris@0: /**
Chris@0: * {@inheritdoc}
Chris@0: */
Chris@0: public function addPolicy(RequestPolicyInterface $policy) {
Chris@0: $this->rules[] = $policy;
Chris@0: return $this;
Chris@0: }
Chris@0:
Chris@0: }