attributes->get('tenant_console_id'); if ($consoleTenantId) { return (int) $consoleTenantId; } // API 호출 시 Referer 헤더에서 tenant-console 컨텍스트 감지 $refererTenantId = self::getTenantIdFromReferer(); if ($refererTenantId) { return $refererTenantId; } // 메인 관리자 페이지: 세션 기반 $sessionTenantId = session('selected_tenant_id'); if ($sessionTenantId && $sessionTenantId !== 'all') { return (int) $sessionTenantId; } return $default; } /** * 세션의 raw 값 반환 (all 포함) * 메인 관리자에서 "전체" 선택 여부 판단 시 사용 */ public static function getRawTenantId(): mixed { $consoleTenantId = request()->attributes->get('tenant_console_id'); if ($consoleTenantId) { return (int) $consoleTenantId; } // API 호출 시 Referer에서 감지 $refererTenantId = self::getTenantIdFromReferer(); if ($refererTenantId) { return $refererTenantId; } return session('selected_tenant_id'); } /** * 테넌트 콘솔(새창) 컨텍스트인지 확인 * * API 호출 시에는 Referer 헤더로 tenant-console 컨텍스트를 감지 */ public static function isTenantConsole(): bool { if (request()->attributes->get('tenant_console_id')) { return true; } // API 호출 시 Referer 헤더에서 tenant-console 컨텍스트 감지 return (bool) self::getTenantIdFromReferer(); } /** * Referer 헤더에서 tenant-console의 tenantId 추출 */ private static function getTenantIdFromReferer(): ?int { $referer = request()->header('Referer', ''); if (preg_match('#/tenant-console/(\d+)#', $referer, $matches)) { return (int) $matches[1]; } return null; } /** * 컨텍스트 인식 라우트 URL 생성 * * 테넌트 콘솔이면 메인 라우트 URL에 /tenant-console/{tenantId} 프리픽스 추가, * 메인이면 기존 라우트 URL 그대로 반환 * * @param string $name 메인 라우트명 (예: 'common-codes.index') * @param array $parameters 추가 파라미터 */ public static function route(string $name, mixed $parameters = []): string { // 메인 라우트 URL 생성 $mainUrl = route($name, $parameters); if (! self::isTenantConsole()) { return $mainUrl; } // 테넌트 콘솔: 메인 URL의 path에 프리픽스 추가 $tenantId = self::getEffectiveTenantId(); $parsed = parse_url($mainUrl); $path = $parsed['path'] ?? '/'; $query = isset($parsed['query']) ? '?' . $parsed['query'] : ''; $consoleUrl = '/tenant-console/' . $tenantId . $path . $query; // 절대 URL이면 호스트 포함 if (isset($parsed['scheme'])) { return $parsed['scheme'] . '://' . $parsed['host'] . (isset($parsed['port']) ? ':' . $parsed['port'] : '') . $consoleUrl; } return $consoleUrl; } /** * 컨텍스트 인식 리다이렉트 */ public static function redirect(string $name, array $parameters = []): \Illuminate\Http\RedirectResponse { return redirect(self::route($name, $parameters)); } }