From baa10b8b0c3bd085a7e6cd5a62d5b5aa25d3ccfb Mon Sep 17 00:00:00 2001 From: Diego Smania <63609705+Shidersz@users.noreply.github.com> Date: Sat, 26 Sep 2020 18:28:24 -0300 Subject: [PATCH] Early stop applying filters on a restricted item (#719) * [src/Menu]: Improve menu builder to early stop applying filters on a restricted menu item. * [src/Menu]: Fix code style. --- config/adminlte.php | 2 +- src/Menu/Builder.php | 20 ++++++++++++++------ tests/TestCase.php | 2 +- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/config/adminlte.php b/config/adminlte.php index e78822c5..22ebf728 100644 --- a/config/adminlte.php +++ b/config/adminlte.php @@ -328,11 +328,11 @@ */ 'filters' => [ + JeroenNoten\LaravelAdminLte\Menu\Filters\GateFilter::class, JeroenNoten\LaravelAdminLte\Menu\Filters\HrefFilter::class, JeroenNoten\LaravelAdminLte\Menu\Filters\SearchFilter::class, JeroenNoten\LaravelAdminLte\Menu\Filters\ActiveFilter::class, JeroenNoten\LaravelAdminLte\Menu\Filters\ClassesFilter::class, - JeroenNoten\LaravelAdminLte\Menu\Filters\GateFilter::class, JeroenNoten\LaravelAdminLte\Menu\Filters\LangFilter::class, JeroenNoten\LaravelAdminLte\Menu\Filters\DataFilter::class, ], diff --git a/src/Menu/Builder.php b/src/Menu/Builder.php index 82d5b1ee..92771aba 100644 --- a/src/Menu/Builder.php +++ b/src/Menu/Builder.php @@ -175,18 +175,26 @@ protected function applyFilters($item) return $item; } - // If the item is a submenu, transform all submenu items first. - - if (MenuItemHelper::isSubmenu($item)) { - $item['submenu'] = $this->transformItems($item['submenu']); - } - // Now, apply all the filters on the item. foreach ($this->filters as $filter) { + + // If the item is not allowed to be shown, there is no sense to + // continue applying the filters. + + if (! MenuItemHelper::isAllowed($item)) { + return $item; + } + $item = $filter->transform($item); } + // If the item is a submenu, transform all submenu items too. + + if (MenuItemHelper::isSubmenu($item)) { + $item['submenu'] = $this->transformItems($item['submenu']); + } + return $item; } diff --git a/tests/TestCase.php b/tests/TestCase.php index 3f53dbcc..144219c0 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -31,11 +31,11 @@ class TestCase extends BaseTestCase protected function makeMenuBuilder($uri = 'http://example.com', GateContract $gate = null, $locale = 'en') { return new Builder([ + new GateFilter($gate ?: $this->makeGate()), new HrefFilter($this->makeUrlGenerator($uri)), new ActiveFilter($this->makeActiveChecker($uri)), new ClassesFilter(), new DataFilter(), - new GateFilter($gate ?: $this->makeGate()), new LangFilter($this->makeTranslator($locale)), new SearchFilter(), ]);