/** * Check items permissions. * * @param User $user * @param array $items * * @return array */ protected function accessFilter(User $user, array $items) { $filteredItems = array_filter($items, function ($item) use($user) { return $item['permissions'] === null || $user->hasAccess($item['permissions'], false); }); array_walk($filteredItems, function (&$item) use($user) { if (count($item['items']) > 0) { $item['items'] = $this->accessFilter($user, $item['items']); } }); //cleanup empty menus return array_filter($filteredItems, function ($item) use($user) { return $item['url'] !== null || count($item['items']) > 0; }); }