/** * @return Collection */ public function generateMenu() { $menu = new Collection(); if (!$this->auth->getUser()) { return $menu; } if (config('shapeshifter.menu')) { foreach (config('shapeshifter.menu') as $item) { $item = $this->parseItem($item); $menu->push($item); } } else { foreach ($this->modules->getOrdered() as $module) { $attributes = $module->json()->getAttributes(); $item = $this->parseItem($attributes); $menu->push($item); } } return $menu->filter(function ($item) { return $this->hasAccessToRoute($item['route']); })->map(function ($item) { $item['children'] = array_filter($item['children'], function ($item) { return $this->hasAccessToRoute($item['route']); }); return $item; })->filter(function ($item) { return $this->hasAccessToRoute('superuser') || count($item['children']) === 0 && $item['route'] !== null; }); }