function ContentModerationHooks::entityFieldAccess

Implements hook_entity_field_access().

Attributes

#[Hook('entity_field_access')]

File

core/modules/content_moderation/src/Hook/ContentModerationHooks.php, line 248

Class

ContentModerationHooks
Hook implementations for content_moderation.

Namespace

Drupal\content_moderation\Hook

Code

public function entityFieldAccess($operation, FieldDefinitionInterface $field_definition, AccountInterface $account, ?FieldItemListInterface $items = NULL) : AccessResultInterface {
  if ($items && $operation === 'edit') {
    /** @var \Drupal\content_moderation\ModerationInformationInterface $moderation_info */
    $moderation_info = \Drupal::service('content_moderation.moderation_information');
    $entity_type = \Drupal::entityTypeManager()->getDefinition($field_definition->getTargetEntityTypeId());
    $entity = $items->getEntity();
    // Deny edit access to the published field if the entity is being
    // moderated.
    if ($entity_type->hasKey('published') && $moderation_info->isModeratedEntity($entity) && $entity->moderation_state && $field_definition->getName() == $entity_type->getKey('published')) {
      return AccessResult::forbidden('Cannot edit the published field of moderated entities.');
    }
  }
  return AccessResult::neutral();
}

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