function FieldBlock::blockAccess

Same name and namespace in other branches
  1. 9 core/modules/layout_builder/src/Plugin/Block/FieldBlock.php \Drupal\layout_builder\Plugin\Block\FieldBlock::blockAccess()
  2. 8.9.x core/modules/layout_builder/src/Plugin/Block/FieldBlock.php \Drupal\layout_builder\Plugin\Block\FieldBlock::blockAccess()
  3. 11.x core/modules/layout_builder/src/Plugin/Block/FieldBlock.php \Drupal\layout_builder\Plugin\Block\FieldBlock::blockAccess()

Indicates whether the block should be shown.

Blocks with specific access checking should override this method rather than access(), in order to avoid repeating the handling of the $return_as_object argument.

Parameters

\Drupal\Core\Session\AccountInterface $account: The user session for which to check access.

Return value

\Drupal\Core\Access\AccessResultInterface The access result.

Overrides BlockPluginTrait::blockAccess

File

core/modules/layout_builder/src/Plugin/Block/FieldBlock.php, line 194

Class

FieldBlock
Provides a block that renders a field from an entity.

Namespace

Drupal\layout_builder\Plugin\Block

Code

protected function blockAccess(AccountInterface $account) {
  $entity = $this->getEntity();
  // First consult the entity.
  $access = $entity->access('view', $account, TRUE);
  if (!$access->isAllowed()) {
    return $access;
  }
  // Check that the entity in question has this field.
  if (!$entity instanceof FieldableEntityInterface || !$entity->hasField($this->fieldName)) {
    return $access->andIf(AccessResult::forbidden());
  }
  // Check field access.
  $field = $entity->get($this->fieldName);
  $access = $access->andIf($field->access('view', $account, TRUE));
  if (!$access->isAllowed()) {
    return $access;
  }
  // Check to see if the field has any values or a default value.
  if ($field->isEmpty() && !$this->entityFieldHasDefaultValue()) {
    return $access->andIf(AccessResult::forbidden());
  }
  return $access;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.