From 32f993a6e1a2e12676bf571f98d8c354f7bd8e27 Mon Sep 17 00:00:00 2001 From: sky121113 Date: Fri, 16 Jan 2026 09:28:29 +0800 Subject: [PATCH] refactor: use DEMO_TENANT_PORT env var for demo logic isolation --- app/Http/Controllers/Auth/LoginController.php | 10 ++++++---- app/Http/Controllers/DashboardController.php | 3 ++- app/Http/Middleware/UniversalTenancy.php | 6 +++--- config/tenancy.php | 11 +++++++++++ 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 33ad350..a8d64f3 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -17,8 +17,9 @@ class LoginController extends Controller { $centralDomains = config('tenancy.central_domains', []); - // [Hack] Demo 環境特殊規則:Port 8081 強制視為租戶 - if (request()->getPort() != 8081 && in_array(request()->getHost(), $centralDomains)) { + // [Hack] Demo 環境特殊規則 + $demoPort = config('tenancy.demo_tenant_port'); + if ((!$demoPort || request()->getPort() != $demoPort) && in_array(request()->getHost(), $centralDomains)) { return Inertia::render('Landlord/Auth/Login'); } @@ -45,8 +46,9 @@ class LoginController extends Controller $centralDomains = config('tenancy.central_domains', []); $centralDomains = config('tenancy.central_domains', []); - // [Hack] Demo 環境特殊規則:Port 8081 強制視為租戶 - if ($request->getPort() != 8081 && in_array($request->getHost(), $centralDomains)) { + // [Hack] Demo 環境特殊規則 + $demoPort = config('tenancy.demo_tenant_port'); + if ((!$demoPort || $request->getPort() != $demoPort) && in_array($request->getHost(), $centralDomains)) { return redirect()->intended(route('landlord.dashboard')); } diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php index faa0f66..9e8df65 100644 --- a/app/Http/Controllers/DashboardController.php +++ b/app/Http/Controllers/DashboardController.php @@ -16,7 +16,8 @@ class DashboardController extends Controller { $centralDomains = config('tenancy.central_domains', []); - if (request()->getPort() != 8081 && in_array(request()->getHost(), $centralDomains)) { + $demoPort = config('tenancy.demo_tenant_port'); + if ((!$demoPort || request()->getPort() != $demoPort) && in_array(request()->getHost(), $centralDomains)) { return redirect()->route('landlord.dashboard'); } diff --git a/app/Http/Middleware/UniversalTenancy.php b/app/Http/Middleware/UniversalTenancy.php index 973702d..45cd43c 100644 --- a/app/Http/Middleware/UniversalTenancy.php +++ b/app/Http/Middleware/UniversalTenancy.php @@ -20,9 +20,9 @@ class UniversalTenancy $centralDomains = config('tenancy.central_domains', []); // [Hack] Demo 環境特殊規則: - // 如果是 8081 端口,強制視為租戶請求 (忽略中央域名檢查) - // 這樣可以讓 192.168.0.103:8081 直接訪問租戶,無需設定 hosts - if ($request->getPort() == 8081) { + // 如果設定了 demo_tenant_port (e.g. 8081),且請求端口相符,強制視為租戶請求 + $demoPort = config('tenancy.demo_tenant_port'); + if ($demoPort && $request->getPort() == $demoPort) { return app(InitializeTenancyByDomain::class)->handle($request, $next); } diff --git a/config/tenancy.php b/config/tenancy.php index e97361e..6ce878c 100644 --- a/config/tenancy.php +++ b/config/tenancy.php @@ -20,6 +20,17 @@ return [ array_map('trim', explode(',', env('CENTRAL_DOMAINS', '127.0.0.1,localhost'))) ), + /* + |-------------------------------------------------------------------------- + | Demo Mode Tenant Port + |-------------------------------------------------------------------------- + | + | If set, requests on this port will be treated as tenant requests + | regardless of the host domain. Useful for IP-based demo access. + | + */ + 'demo_tenant_port' => env('DEMO_TENANT_PORT'), + /** * Tenancy bootstrappers are executed when tenancy is initialized. * Their responsibility is making Laravel features tenant-aware.