From b943098e80f8abbaaef26c4ee4513c61180462ee Mon Sep 17 00:00:00 2001
From: tsecher <me@thomas-secher.fr>
Date: Mon, 11 Jul 2022 12:14:11 +0200
Subject: [PATCH] Fix on item access

---
 custom_admin_menu.services.yml                | 24 ++++++++++++++++---
 src/Service/CustomAdminMenuManager.php        | 14 ++++++++++-
 .../CustomAdminMenuMenuItemDisplayManager.php |  7 ++++++
 3 files changed, 41 insertions(+), 4 deletions(-)

diff --git a/custom_admin_menu.services.yml b/custom_admin_menu.services.yml
index 840a17f..db0e91e 100644
--- a/custom_admin_menu.services.yml
+++ b/custom_admin_menu.services.yml
@@ -1,7 +1,16 @@
 services:
   custom_admin_menu.manager:
     class: Drupal\custom_admin_menu\Service\CustomAdminMenuManager
-    arguments: [ '@current_user', '@toolbar.menu_tree', '@theme.manager', '@entity_type.manager', '@config.factory', '@theme.initialization', '@module_handler', '@custom_admin_menu.settings' ]
+    arguments:
+      - '@current_user'
+      - '@toolbar.menu_tree'
+      - '@theme.manager'
+      - '@entity_type.manager'
+      - '@config.factory'
+      - '@theme.initialization'
+      - '@module_handler'
+      - '@custom_admin_menu.settings'
+      - '@custom_admin_menu.menu_item_display_manager'
 
   custom_admin_menu.settings:
     class: Drupal\custom_admin_menu\Service\CustomAdminMenuSettings
@@ -9,8 +18,17 @@ services:
 
   custom_admin_menu.shortcuts:
     class: Drupal\custom_admin_menu\Service\CustomAdminMenuShortcuts
-    arguments: [ '@theme.manager', '@theme.initialization', '@entity_type.manager', '@config.factory', '@request_stack', '@title_resolver', '@custom_admin_menu.settings' ]
+    arguments:
+      - '@theme.manager'
+      - '@theme.initialization'
+      - '@entity_type.manager'
+      - '@config.factory'
+      - '@request_stack'
+      - '@title_resolver'
+      - '@custom_admin_menu.settings'
 
   custom_admin_menu.menu_item_display_manager:
     class: Drupal\custom_admin_menu\Service\CustomAdminMenuMenuItemDisplayManager
-    arguments: [ '@current_user', '@language_manager' ]
+    arguments:
+      - '@current_user'
+      - '@language_manager'
diff --git a/src/Service/CustomAdminMenuManager.php b/src/Service/CustomAdminMenuManager.php
index 435ccaa..b04f57a 100644
--- a/src/Service/CustomAdminMenuManager.php
+++ b/src/Service/CustomAdminMenuManager.php
@@ -101,6 +101,13 @@ class CustomAdminMenuManager implements TrustedCallbackInterface {
    */
   protected $currentUser;
 
+  /**
+   * Menu item display manager.
+   *
+   * @var \Drupal\custom_admin_menu\Service\CustomAdminMenuMenuItemDisplayManager
+   */
+  protected CustomAdminMenuMenuItemDisplayManager $customAdminMenuMenuItemDisplayManager;
+
   /**
    * CustomAdminMenuManager constructor.
    *
@@ -129,7 +136,8 @@ class CustomAdminMenuManager implements TrustedCallbackInterface {
     ConfigFactoryInterface $configFactory,
     ThemeInitializationInterface $themeInitialization,
     ModuleHandlerInterface $moduleHandler,
-    CustomAdminMenuSettings $settings) {
+    CustomAdminMenuSettings $settings,
+    CustomAdminMenuMenuItemDisplayManager $customAdminMenuMenuItemDisplayManager) {
     $this->currentUser = $currentUser;
     $this->menuLinkTree = $menuLinkTree;
     $this->adminTheme = $themeManager->getActiveTheme();
@@ -139,6 +147,7 @@ class CustomAdminMenuManager implements TrustedCallbackInterface {
     $this->themeInitialization = $themeInitialization;
     $this->moduleHandler = $moduleHandler;
     $this->settings = $settings;
+    $this->customAdminMenuMenuItemDisplayManager = $customAdminMenuMenuItemDisplayManager;
   }
 
   /**
@@ -182,6 +191,9 @@ class CustomAdminMenuManager implements TrustedCallbackInterface {
     // Build the menu.
     $buildArray = $this->getMenuBuildArray($menu->id());
 
+    // Filter allowed items.
+    $this->customAdminMenuMenuItemDisplayManager->filterItems($buildArray['#items']);
+
     // Add toolbar-icon class.
     $this->initClasses($buildArray['#items']);
 
diff --git a/src/Service/CustomAdminMenuMenuItemDisplayManager.php b/src/Service/CustomAdminMenuMenuItemDisplayManager.php
index 6e84b48..e209482 100644
--- a/src/Service/CustomAdminMenuMenuItemDisplayManager.php
+++ b/src/Service/CustomAdminMenuMenuItemDisplayManager.php
@@ -112,6 +112,7 @@ class CustomAdminMenuMenuItemDisplayManager
    *   The item plugin definition.
    * @param AccountProxyInterface $user
    *   The user;
+   *
    * @return bool
    */
   protected function isDisallowedRoles(array $metadata, AccountProxyInterface $user)
@@ -138,4 +139,10 @@ class CustomAdminMenuMenuItemDisplayManager
     return $isDisallowed;
   }
 
+  public function filterItems(&$items) {
+    $items = array_filter($items, function ($item){
+      return !$this->itemIsDisallowed($item);
+    });
+  }
+
 }
-- 
GitLab