You are here

public function DeleteAction::access in Entity Reference Integrity 8

Checks object access.

Parameters

mixed $object: The object to execute the action on.

\Drupal\Core\Session\AccountInterface $account: (optional) The user for which to check access, or NULL to check access for the current user. Defaults to NULL.

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 DeleteAction::access

File

modules/entity_reference_integrity_enforce/src/Plugin/Action/DeleteAction.php, line 23

Class

DeleteAction
Extends the core DeleteAction plugin.

Namespace

Drupal\entity_reference_integrity_enforce\Plugin\Action

Code

public function access($object, AccountInterface $account = NULL, $return_as_object = FALSE) {

  // First check if the account has access.
  $access = parent::access($object, $account, TRUE);

  // Bail if the object is not an entity or access is denied.
  if (!$object instanceof EntityInterface || !$access
    ->isAllowed()) {
    return $return_as_object ? $access : $access
      ->isAllowed();
  }

  // Check for dependent entities.
  $has_dependents = FALSE;
  $enabled_entity_type_ids = \Drupal::config('entity_reference_integrity_enforce.settings')
    ->get('enabled_entity_type_ids');
  if (in_array($object
    ->getEntityTypeId(), $enabled_entity_type_ids, TRUE)) {
    $has_dependents = $this->entityTypeManager
      ->getHandler($object
      ->getEntityTypeId(), 'entity_reference_integrity')
      ->hasDependents($object);
  }

  // Deny access if it has dependents.
  $reason = $this
    ->t('Can not delete the @entity_type_label %entity_label as it is being referenced by another entity.', [
    '@entity_type_label' => $object
      ->getEntityType()
      ->getLabel(),
    '%entity_label' => $object
      ->label(),
  ])
    ->render();
  $integrity_access = AccessResult::forbiddenIf($has_dependents, $reason);
  $access = $access
    ->orIf($integrity_access);
  return $return_as_object ? $access : $access
    ->isAllowed();
}