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

Created on 18 April 2025, 25 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