Exemple #1
0
 /**
  * {@inheritdoc}
  */
 public function andIf(AccessResultInterface $other)
 {
     // The other access result's cacheability metadata is merged if $merge_other
     // gets set to TRUE. It gets set to TRUE in one case: if the other access
     // result is used.
     $merge_other = FALSE;
     if ($this->isForbidden() || $other->isForbidden()) {
         $result = static::forbidden();
         if (!$this->isForbidden()) {
             $merge_other = TRUE;
         }
     } elseif ($this->isAllowed() && $other->isAllowed()) {
         $result = static::allowed();
         $merge_other = TRUE;
     } else {
         $result = static::neutral();
         if (!$this->isNeutral()) {
             $merge_other = TRUE;
         }
     }
     $result->inheritCacheability($this);
     if ($merge_other) {
         $result->inheritCacheability($other);
         // If this access result is not cacheable, then an AND with another access
         // result must also not be cacheable, except if the other access result
         // has isForbidden() === TRUE. isForbidden() access results are contagious
         // in that they propagate regardless of the other value.
         if ($this->getCacheMaxAge() === 0 && !$result->isForbidden()) {
             $result->setCacheMaxAge(0);
         }
     }
     return $result;
 }
Exemple #2
0
 /**
  * {@inheritdoc}
  */
 public function andIf(AccessResultInterface $other)
 {
     if ($this->isForbidden() || $other->isForbidden()) {
         return new static('FORBIDDEN');
     } elseif ($this->isAllowed() && $other->isAllowed()) {
         return new static('ALLOWED');
     } else {
         return new static('NEUTRAL');
     }
 }