You are here

protected function FieldBlock::blockAccess in Drupal 9

Same name and namespace in other branches
  1. 8 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\AccessResult The access result.

Overrides BlockPluginTrait::blockAccess

See also

self::access()

File

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

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.
  if ($field
    ->isEmpty()) {
    return $access
      ->andIf(AccessResult::forbidden());
  }
  return $access;
}