function FieldBlock::blockAccess

Same name and namespace in other branches
  1. 8.9.x core/modules/layout_builder/src/Plugin/Block/FieldBlock.php \Drupal\layout_builder\Plugin\Block\FieldBlock::blockAccess()
  2. 10 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()

Overrides BlockPluginTrait::blockAccess

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 or a default value.
    if ($field->isEmpty() && !$field->getFieldDefinition()
        ->getDefaultValue($entity)) {
        // @todo Remove special handling of image fields after
        //   https://www.drupal.org/project/drupal/issues/3005528.
        if ($field->getFieldDefinition()
            ->getType() === 'image' && $field->getFieldDefinition()
            ->getSetting('default_image')) {
            return $access;
        }
        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.