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: }