GLOBEAU ADMIN
@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
{{ $menu['title'] }} @if($hasChildBadge) @endif
    @foreach($filteredChildren as $child) @php $isChildActive = isset($child['pattern']) && request()->routeIs($child['pattern']); $childUrl = ($child['route'] !== '#') ? route($child['route']) : '#'; $childBadgeCount = isset($child['badge']) ? call_user_func($child['badge']) : 0; @endphp
  • {{ $child['title'] }} @if($childBadgeCount > 0) {{ $childBadgeCount }} @endif
  • @endforeach
@else {{-- 2. 하위 메뉴가 없는 단일 메뉴인 경우 --}} @php $isActive = isset($menu['pattern']) && request()->routeIs($menu['pattern']); $menuUrl = ($menu['route'] !== '#') ? route($menu['route']) : '#'; $badgeCount = isset($menu['badge']) ? call_user_func($menu['badge']) : 0; @endphp
{{ $menu['title'] }} @if($badgeCount > 0) {{ $badgeCount }} @endif
@endif @endif @endforeach
@foreach(config('admin_menu.footer_menu') as $index => $menu) @php $user = auth()->user(); $isAdmin = $user->hasRole('admin'); // 1. [푸터 대메뉴는 권한 설정 유무와 관계없이 항상 노출] $hasFooterMenuPermission = true; // 2. [푸터 하위 메뉴 권한 필터링] $filteredFooterChildren = []; if (isset($menu['children'])) { foreach ($menu['children'] as $child) { $hasChildPermission = $isAdmin || (isset($child['permission']) && $user->hasPermissionTo($child['permission'])); if ($hasChildPermission) { $filteredFooterChildren[] = $child; } } } // 3. [푸터 최종 노출 여부 결정] $shouldDisplayFooter = false; if (!isset($menu['children'])) { $shouldDisplayFooter = true; } else { $shouldDisplayFooter = (count($filteredFooterChildren) > 0); } @endphp @if($shouldDisplayFooter) @if(isset($menu['children'])) @php $isActive = isset($menu['pattern']) && request()->routeIs($menu['pattern']); $collapseId = 'footerSubmenu' . $index; $hasChildBadge = false; foreach($filteredFooterChildren as $child) { if (isset($child['badge']) && call_user_func($child['badge']) > 0) { $hasChildBadge = true; break; } } @endphp
{{ $menu['title'] }} @if($hasChildBadge) @endif
    @foreach($filteredFooterChildren as $child) @php $isChildActive = isset($child['pattern']) && request()->routeIs($child['pattern']); $childUrl = ($child['route'] !== '#') ? route($child['route']) : '#'; $childBadgeCount = isset($child['badge']) ? call_user_func($child['badge']) : 0; @endphp
  • {{ $child['title'] }} @if($childBadgeCount > 0) {{ $childBadgeCount }} @endif
  • @endforeach
@else @php $isActive = isset($menu['pattern']) && request()->routeIs($menu['pattern']); $menuUrl = ($menu['route'] !== '#') ? route($menu['route']) : '#'; $badgeCount = isset($menu['badge']) ? call_user_func($menu['badge']) : 0; @endphp
{{ $menu['title'] }} @if($badgeCount > 0) {{ $badgeCount }} @endif
@endif @endif @endforeach