ContentCreatorVisibleXbConfigEntityAccessControlHandler's `view` access must refuse access to disabled config entities

Created on 18 April 2025, 4 days ago

Overview

Discovered by @penyaskito at https://git.drupalcode.org/project/experience_builder/-/merge_requests/8...

Proposed resolution

diff --git a/src/EntityHandlers/ContentCreatorVisibleXbConfigEntityAccessControlHandler.php b/src/EntityHandlers/ContentCreatorVisibleXbConfigEntityAccessControlHandler.php
index a1bb474b6..ed89c4324 100644
--- a/src/EntityHandlers/ContentCreatorVisibleXbConfigEntityAccessControlHandler.php
+++ b/src/EntityHandlers/ContentCreatorVisibleXbConfigEntityAccessControlHandler.php
@@ -6,6 +6,7 @@ namespace Drupal\experience_builder\EntityHandlers;
 
 use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Access\AccessResultInterface;
+use Drupal\Core\Config\Entity\ConfigEntityInterface;
 use Drupal\Core\Entity\EntityHandlerInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Session\AccountInterface;
@@ -15,10 +16,10 @@ final class ContentCreatorVisibleXbConfigEntityAccessControlHandler extends XbCo
   /**
    * {@inheritdoc}
    */
-  protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account): AccessResultInterface {
+  protected function checkAccess(ConfigEntityInterface $entity, $operation, AccountInterface $account): AccessResultInterface {
     return match($operation) {
       // We always allow viewing these entities.
-      'view' => AccessResult::allowed(),
+      'view' => AccessResult::allowedIf($entity->status()),
       default => parent::checkAccess($entity, $operation, $account),
     };
   }
diff --git a/src/EntityHandlers/XbConfigEntityAccessControlHandler.php b/src/EntityHandlers/XbConfigEntityAccessControlHandler.php
index f588d457d..828aaee88 100644
--- a/src/EntityHandlers/XbConfigEntityAccessControlHandler.php
+++ b/src/EntityHandlers/XbConfigEntityAccessControlHandler.php
@@ -7,6 +7,7 @@ namespace Drupal\experience_builder\EntityHandlers;
 use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Access\AccessResultInterface;
 use Drupal\Core\Config\ConfigManagerInterface;
+use Drupal\Core\Config\Entity\ConfigEntityInterface;
 use Drupal\Core\Entity\EntityAccessControlHandler;
 use Drupal\Core\Entity\EntityHandlerInterface;
 use Drupal\Core\Entity\EntityInterface;
@@ -34,7 +35,7 @@ class XbConfigEntityAccessControlHandler extends EntityAccessControlHandler impl
   /**
    * {@inheritdoc}
    */
-  protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account): AccessResultInterface {
+  protected function checkAccess(ConfigEntityInterface $entity, $operation, AccountInterface $account): AccessResultInterface {
     $adminPermission = $this->entityType->getAdminPermission();
     assert(is_string($adminPermission));
     return match($operation) {

User interface changes

🐛 Bug report
Status

Active

Version

0.0

Component

Config management

Created by

🇧🇪Belgium wim leers Ghent 🇧🇪🇪🇺

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Merge Requests

Comments & Activities

Production build 0.71.5 2024