diff --git a/src/Entity/Transport.php b/src/Entity/Transport.php index c1d176c1ba92480e08a8fabc7164184fd276e231..c41e647eee5b00f8bf2311cc55078dd51b125879 100644 --- a/src/Entity/Transport.php +++ b/src/Entity/Transport.php @@ -19,7 +19,8 @@ use Drupal\symfony_mailer_lite\TransportInterface; * "edit" = "Drupal\symfony_mailer_lite\Form\TransportForm", * "add" = "Drupal\symfony_mailer_lite\Form\TransportAddForm", * "delete" = "Drupal\Core\Entity\EntityDeleteForm" - * } + * }, + * "access" = "Drupal\symfony_mailer_lite\TransportAccessControlHandler", * }, * admin_permission = "administer symfony_mailer_lite configuration", * entity_keys = { diff --git a/src/TransportAccessControlHandler.php b/src/TransportAccessControlHandler.php new file mode 100644 index 0000000000000000000000000000000000000000..a8b32a37517abbddd562cc004502a91dff39562c --- /dev/null +++ b/src/TransportAccessControlHandler.php @@ -0,0 +1,28 @@ +<?php + +namespace Drupal\symfony_mailer_lite; + +use Drupal\Core\Access\AccessResult; +use Drupal\Core\Entity\EntityAccessControlHandler; +use Drupal\Core\Entity\EntityInterface; +use Drupal\Core\Session\AccountInterface; + +class TransportAccessControlHandler extends EntityAccessControlHandler { + + /** + * {@inheritdoc} + */ + protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) { + $parentAccess = parent::checkAccess($entity, $operation, $account); + + switch ($operation) { + case 'delete': + return AccessResult::allowedIfHasPermission($account, 'administer symfony_mailer_lite configuration') + ->andIf(AccessResult::allowedIf(!$entity->isDefault())) + ->andIf($parentAccess); + } + + return $parentAccess; + } + +} diff --git a/src/TransportListBuilder.php b/src/TransportListBuilder.php index fc09af6971ea535b6a89711fb8ca456d620ce7df..9058f01e8d9759e8ef248fd6c6e2aa6db40a8910 100644 --- a/src/TransportListBuilder.php +++ b/src/TransportListBuilder.php @@ -77,11 +77,8 @@ class TransportListBuilder extends ConfigEntityListBuilder { public function getDefaultOperations(EntityInterface $entity) { $operations = parent::getDefaultOperations($entity); - // Prevent the default transport being deleted. - if ($entity->isDefault()) { - unset($operations['delete']); - } - else { + // Add op to set default to all non-default transports. + if (!$entity->isDefault()) { $operations['default'] = [ 'title' => $this->t('Set as default'), 'url' => Url::fromRoute('entity.symfony_mailer_lite_transport.set_default', [