og-8.x-1.x-dev/src/Event/AccessEventBase.php
src/Event/AccessEventBase.php
<?php
declare(strict_types=1);
namespace Drupal\og\Event;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Access\AccessResultInterface;
use Drupal\Core\Cache\RefinableCacheableDependencyInterface;
use Drupal\Core\Cache\RefinableCacheableDependencyTrait;
use Drupal\Core\Entity\ContentEntityInterface;
use Drupal\Core\Session\AccountInterface;
use Symfony\Contracts\EventDispatcher\Event;
/**
* Base class for OG access events.
*/
class AccessEventBase extends Event implements AccessEventInterface {
use RefinableCacheableDependencyTrait;
/**
* The access result.
*/
protected AccessResultInterface $access;
/**
* Constructs an AccessEventBase event.
*
* @param \Drupal\Core\Entity\ContentEntityInterface $group
* The group that provides the context in which to perform the access check.
* @param \Drupal\Core\Session\AccountInterface $user
* The user for which to check access.
*/
public function __construct(
protected readonly ContentEntityInterface $group,
protected readonly AccountInterface $user,
) {
$this->access = AccessResult::neutral();
}
/**
* {@inheritdoc}
*/
public function grantAccess(): AccessResultInterface {
$this->access = $this->access->orIf(AccessResult::allowed());
return $this->access;
}
/**
* {@inheritdoc}
*/
public function denyAccess(): AccessResultInterface {
$this->access = $this->access->orIf(AccessResult::forbidden());
return $this->access;
}
/**
* {@inheritdoc}
*/
public function mergeAccessResult(AccessResultInterface $access_result): AccessResultInterface {
$this->access = $this->access->orIf($access_result);
return $this->access;
}
/**
* {@inheritdoc}
*/
public function getGroup(): ContentEntityInterface {
return $this->group;
}
/**
* {@inheritdoc}
*/
public function getUser(): AccountInterface {
return $this->user;
}
/**
* {@inheritdoc}
*/
public function getAccessResult(): AccessResultInterface {
$access = $this->access;
// Enrich the access result object with our cacheability metadata in case it
// supports it.
if ($access instanceof RefinableCacheableDependencyInterface) {
$access->addCacheableDependency($this);
}
return $access;
}
}
