.../field/src/FieldConfigAccessControlHandler.php | 19 +++++------------ .../src/FieldStorageConfigAccessControlHandler.php | 24 +++++++++++++++++++++- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/core/modules/field/src/FieldConfigAccessControlHandler.php b/core/modules/field/src/FieldConfigAccessControlHandler.php index e27f99c..a383e12 100644 --- a/core/modules/field/src/FieldConfigAccessControlHandler.php +++ b/core/modules/field/src/FieldConfigAccessControlHandler.php @@ -2,32 +2,23 @@ namespace Drupal\field; -use Drupal\Core\Access\AccessResult; -use Drupal\Core\Entity\EntityAccessControlHandler; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Session\AccountInterface; /** - * Defines the access control handler for the field entity type. + * Defines the access control handler for the field config entity type. * * @see \Drupal\field\Entity\FieldConfig */ -class FieldConfigAccessControlHandler extends EntityAccessControlHandler { +class FieldConfigAccessControlHandler extends FieldStorageConfigAccessControlHandler { /** * {@inheritdoc} */ protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) { - if ($operation == 'delete') { - $field_storage_entity = $entity->getFieldStorageDefinition(); - if ($field_storage_entity->isLocked()) { - return AccessResult::forbidden()->addCacheableDependency($field_storage_entity); - } - else { - return AccessResult::allowedIfHasPermission($account, 'administer ' . $entity->getTargetEntityTypeId() . ' fields')->addCacheableDependency($field_storage_entity); - } - } - return AccessResult::allowedIfHasPermission($account, 'administer ' . $entity->getTargetEntityTypeId() . ' fields'); + /** \Drupal\field\FieldConfigInterface $entity */ + $field_storage_entity = $entity->getFieldStorageDefinition(); + return parent::checkFieldAccess($field_storage_entity, $operation, $account); } } diff --git a/core/modules/field/src/FieldStorageConfigAccessControlHandler.php b/core/modules/field/src/FieldStorageConfigAccessControlHandler.php index 079ebc8..ce783a6 100644 --- a/core/modules/field/src/FieldStorageConfigAccessControlHandler.php +++ b/core/modules/field/src/FieldStorageConfigAccessControlHandler.php @@ -2,9 +2,31 @@ namespace Drupal\field; +use Drupal\Core\Access\AccessResult; +use Drupal\Core\Entity\EntityAccessControlHandler; +use Drupal\Core\Entity\EntityInterface; +use Drupal\Core\Session\AccountInterface; + /** * Defines the access control handler for the field storage config entity type. * * @see \Drupal\field\Entity\FieldStorageConfig */ -class FieldStorageConfigAccessControlHandler extends FieldConfigAccessControlHandler {} +class FieldStorageConfigAccessControlHandler extends EntityAccessControlHandler { + + /** + * {@inheritdoc} + */ + protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) { + /** \Drupal\field\FieldStorageConfigInterface $entity */ + if ($operation === 'delete') { + if ($entity->isLocked()) { + return AccessResult::forbidden()->addCacheableDependency($entity); + } + else { + return AccessResult::allowedIfHasPermission($account, 'administer ' . $entity->getTargetEntityTypeId() . ' fields')->addCacheableDependency($entity); + } + } + return AccessResult::allowedIfHasPermission($account, 'administer ' . $entity->getTargetEntityTypeId() . ' fields'); + } +}