Files
sam-manage/app/Helpers/TenantHelper.php
권혁성 8da1702e47 fix: [tenant-console] 테넌트 콘솔 분리작업
- 라우트 파라미터 충돌 수정 (Layer 4 확장)
- TenantScope 글로벌 스코프가 테넌트 콘솔에서 올바른 tenant_id 사용하도록 수정
- 감사로그 상세 테넌트 콘솔 레이아웃 적용
- 테넌트 전환: 모달 → 컨텍스트 메뉴로 이동, 스타일 변경 (녹색+전환아이콘)
- 테넌트 전환 이벤트를 openTenantConsole 호출로 통일
- 사이드바 스타일 메인과 통일 + 리포트 주의사항 정리
2026-03-13 10:18:23 +09:00

102 lines
3.3 KiB
PHP

<?php
namespace App\Helpers;
/**
* 테넌트 컨텍스트 헬퍼
*
* 테넌트 콘솔(새창)에서는 URL의 tenantId를,
* 메인 관리자 페이지에서는 세션의 selected_tenant_id를 사용
*/
class TenantHelper
{
/**
* 메인 라우트명 → 테넌트 콘솔 라우트명 매핑
* (패턴이 다른 것만 명시, 나머지는 자동 매핑)
*/
private static array $routeMap = [
'item-management.index' => 'tenant-console.production.items.index',
'item-fields.index' => 'tenant-console.production.item-fields.index',
'quote-formulas.index' => 'tenant-console.production.quote-formulas.index',
'quote-formulas.create' => 'tenant-console.production.quote-formulas.create',
'quote-formulas.edit' => 'tenant-console.production.quote-formulas.edit',
'quote-formulas.simulator' => 'tenant-console.production.quote-formulas.simulator',
'quote-formulas.categories.index' => 'tenant-console.production.quote-formulas.categories.index',
];
/**
* 현재 유효한 테넌트 ID 반환
*
* 우선순위:
* 1. request attributes (tenant_console_id) - 테넌트 콘솔 새창
* 2. session (selected_tenant_id) - 메인 관리자 페이지
*/
public static function getEffectiveTenantId(?int $default = null): ?int
{
// 테넌트 콘솔 컨텍스트 우선
$consoleTenantId = request()->attributes->get('tenant_console_id');
if ($consoleTenantId) {
return (int) $consoleTenantId;
}
// 메인 관리자 페이지: 세션 기반
$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;
}
return session('selected_tenant_id');
}
/**
* 테넌트 콘솔(새창) 컨텍스트인지 확인
*/
public static function isTenantConsole(): bool
{
return (bool) request()->attributes->get('tenant_console_id');
}
/**
* 컨텍스트 인식 라우트 URL 생성
*
* 테넌트 콘솔이면 tenant-console.* 라우트로,
* 메인이면 기존 라우트로 URL 생성
*
* @param string $name 메인 라우트명 (예: 'common-codes.index')
* @param array $parameters 추가 파라미터
*/
public static function route(string $name, array $parameters = []): string
{
if (! self::isTenantConsole()) {
return route($name, $parameters);
}
$tenantId = self::getEffectiveTenantId();
$consoleName = self::$routeMap[$name] ?? 'tenant-console.'.$name;
return route($consoleName, array_merge(['tenantId' => $tenantId], $parameters));
}
/**
* 컨텍스트 인식 리다이렉트
*/
public static function redirect(string $name, array $parameters = []): \Illuminate\Http\RedirectResponse
{
return redirect(self::route($name, $parameters));
}
}