public function RegistrationAccessControlHandler::createAccess in RNG - Events and Registrations 8.2
Same name and namespace in other branches
- 8 src/AccessControl/RegistrationAccessControlHandler.php \Drupal\rng\AccessControl\RegistrationAccessControlHandler::createAccess()
- 3.x src/AccessControl/RegistrationAccessControlHandler.php \Drupal\rng\AccessControl\RegistrationAccessControlHandler::createAccess()
Checks access to create an entity.
Parameters
string $entity_bundle: (optional) The bundle of the entity. Required if the entity supports bundles, defaults to NULL otherwise.
\Drupal\Core\Session\AccountInterface $account: (optional) The user session for which to check access, or NULL to check access for the current user. Defaults to NULL.
array $context: (optional) An array of key-value pairs to pass additional context when needed.
bool $return_as_object: (optional) Defaults to FALSE.
Return value
bool|\Drupal\Core\Access\AccessResultInterface The access result. Returns a boolean if $return_as_object is FALSE (this is the default) and otherwise an AccessResultInterface object. When a boolean is returned, the result of AccessInterface::isAllowed() is returned, i.e. TRUE means access is explicitly allowed, FALSE means access is either explicitly forbidden or "no opinion".
Overrides EntityAccessControlHandler::createAccess
File
- src/
AccessControl/ RegistrationAccessControlHandler.php, line 86
Class
- RegistrationAccessControlHandler
- Access controller for the registration entity.
Namespace
Drupal\rng\AccessControlCode
public function createAccess($entity_bundle = NULL, AccountInterface $account = NULL, array $context = [], $return_as_object = FALSE) {
// $entity_bundle: A registration type, or NULL if it is a registration type
// listing.
if (!isset($context['event'])) {
throw new AccessException('Requires event context.');
}
$event = $context['event'];
$fail = $return_as_object ? AccessResult::forbidden()
->addCacheableDependency($event)
->addCacheContexts([
'rng_event',
'user',
]) : FALSE;
$account = $this
->prepareUser($account);
try {
$event = new RegistrationAccessEvent($entity_bundle, $account, $context);
$this->eventDispatcher
->dispatch(RegistrationEvents::REGISTRATION_CREATE_ACCESS, $event);
if (!$event
->isAccessAllowed()) {
return $fail;
}
$event_meta = $this->eventManager
->getMeta($context['event']);
// $entity_bundle is omitted for registration type list at
// $event_path/register
if ($entity_bundle && ($registration_type = RegistrationType::load($entity_bundle))) {
if (!$event_meta
->registrationTypeIsValid($registration_type)) {
return $fail;
}
}
elseif (!$event_meta
->getRegistrationTypeIds()) {
return $fail;
}
if (!$event_meta
->isAcceptingRegistrations()) {
return $fail;
}
if ($event_meta
->remainingRegistrantCapacity() == 0) {
return $fail;
}
if (!$event_meta
->canRegisterProxyIdentities()) {
return $fail;
}
$result = parent::createAccess($entity_bundle, $account, $context, TRUE);
if ($result
->isForbidden()) {
return $return_as_object ? $result : $result
->isAllowed();
}
return $return_as_object ? AccessResult::allowed()
->addCacheableDependency($event)
->addCacheContexts([
'rng_event',
'user',
]) : TRUE;
} catch (InvalidEventException $e) {
return $fail;
}
}