43 lines
1.2 KiB
PHP
43 lines
1.2 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace App\Http\Middleware;
|
||
|
|
|
||
|
|
use App\Models\Tenants\Tenant;
|
||
|
|
use Closure;
|
||
|
|
use Illuminate\Http\Request;
|
||
|
|
use Symfony\Component\HttpFoundation\Response;
|
||
|
|
|
||
|
|
class SetTenantContext
|
||
|
|
{
|
||
|
|
/**
|
||
|
|
* 테넌트 콘솔 새창에서 URL의 tenantId를 컨텍스트로 설정
|
||
|
|
* 메인 창의 세션에는 영향을 주지 않음
|
||
|
|
*/
|
||
|
|
public function handle(Request $request, Closure $next): Response
|
||
|
|
{
|
||
|
|
$tenantId = $request->route('tenantId');
|
||
|
|
|
||
|
|
if (! $tenantId) {
|
||
|
|
abort(404, '테넌트 ID가 필요합니다.');
|
||
|
|
}
|
||
|
|
|
||
|
|
$tenant = Tenant::find($tenantId);
|
||
|
|
|
||
|
|
if (! $tenant) {
|
||
|
|
abort(404, '테넌트를 찾을 수 없습니다.');
|
||
|
|
}
|
||
|
|
|
||
|
|
// 요청 범위에서만 테넌트 컨텍스트 설정 (세션 변경 없음)
|
||
|
|
$request->attributes->set('tenant_console_id', $tenantId);
|
||
|
|
$request->attributes->set('tenant_console', $tenant);
|
||
|
|
$request->attributes->set('tenant_id', (int) $tenantId);
|
||
|
|
|
||
|
|
// 뷰에서 사용할 수 있도록 공유
|
||
|
|
view()->share('consoleTenant', $tenant);
|
||
|
|
view()->share('consoleTenantId', $tenantId);
|
||
|
|
view()->share('isTenantConsole', true);
|
||
|
|
|
||
|
|
return $next($request);
|
||
|
|
}
|
||
|
|
}
|