@foreach(config('admin_menu.main_menu') as $index => $menu)
@php
$user = auth()->user();
$isAdmin = $user->hasRole('admin');
// 1. [대메뉴 자체는 권한 설정 유무와 관계없이 항상 노출되도록 허용]
$hasMenuPermission = true;
// 2. [하위 메뉴(children) 권한 필터링]
// - permission이 지정되어 있으면서 사용자가 그 권한을 가지고 있거나
// - 관리자(admin)인 경우에만 통과 (permission이 아예 없는 서브메뉴는 여기서 자동 차단됩니다)
$filteredChildren = [];
if (isset($menu['children'])) {
foreach ($menu['children'] as $child) {
$hasChildPermission = $isAdmin || (isset($child['permission']) && $user->hasPermissionTo($child['permission']));
if ($hasChildPermission) {
$filteredChildren[] = $child;
}
}
}
// 3. [최종 노출 여부 결정]
$shouldDisplay = false;
if (!isset($menu['children'])) {
// 하위 메뉴가 없는 단일 메뉴인 경우
$shouldDisplay = true;
} else {
// 하위 메뉴가 있는 경우: 권한을 통과한 하위 메뉴가 1개 이상 존재할 때만 대메뉴도 함께 노출
$shouldDisplay = (count($filteredChildren) > 0);
}
@endphp
@if($shouldDisplay)
@if(isset($menu['children']))
{{-- 1. 하위 메뉴(서브)가 있는 경우 --}}
@php
$isActive = isset($menu['pattern']) && request()->routeIs($menu['pattern']);
$collapseId = 'mainSubmenu' . $index;
$hasChildBadge = false;
foreach($filteredChildren as $child) {
if (isset($child['badge']) && call_user_func($child['badge']) > 0) {
$hasChildBadge = true;
break;
}
}
@endphp