diff --git a/src/Form/UwContentModerationForm.php b/src/Form/UwContentModerationForm.php index b6613f17ee84e993b042d0f9e1c9ecdd34fea2cd..d7b8876cf890ab8883ea8ea067afa85f0a08c304 100644 --- a/src/Form/UwContentModerationForm.php +++ b/src/Form/UwContentModerationForm.php @@ -2,10 +2,13 @@ namespace Drupal\uw_cfg_common\Form; +use Drupal\Core\Access\AccessResult; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Form\ConfirmFormBase; use Drupal\Core\Form\FormStateInterface; +use Drupal\Core\Session\AccountInterface; use Drupal\Core\Url; +use Drupal\uw_cfg_common\Service\UWService; use Symfony\Component\DependencyInjection\ContainerInterface; /** @@ -54,6 +57,19 @@ class UwContentModerationForm extends ConfirmFormBase { ); } + /** + * Access callback. No access for the home page, except by admin. + * + * @return object + * A AccessResult object. + */ + public function access(int $nid, AccountInterface $account): AccessResult { + if (UWService::nodeIsHomePage($nid) && !$account->hasPermission('bypass home page protection')) { + return AccessResult::forbidden(); + } + return AccessResult::allowed(); + } + /** * {@inheritdoc} */ diff --git a/uw_cfg_common.routing.yml b/uw_cfg_common.routing.yml index cd86dba516fdd844199f59060c7fa1140128fc75..fe107ffc729639d3662c62f5f477297db57ff194 100644 --- a/uw_cfg_common.routing.yml +++ b/uw_cfg_common.routing.yml @@ -11,4 +11,5 @@ uw_content_moderation.form: _title: 'Content moderation' _form: '\Drupal\uw_cfg_common\Form\UwContentModerationForm' requirements: + _custom_access: '\Drupal\uw_cfg_common\Form\UwContentModerationForm::access' _permission: 'access content'