TenantMiddleware.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. namespace App\Http\Middleware;
  3. use Closure;
  4. use Illuminate\Http\Request;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Illuminate\Support\Facades\DB;
  7. use Illuminate\Support\Facades\Log;
  8. class TenantMiddleware
  9. {
  10. /**
  11. * Handle an incoming request.
  12. */
  13. public function handle(Request $request, Closure $next): Response
  14. {
  15. if (! $request->user()) {
  16. return redirect('/');
  17. }
  18. $this->setupTenantConnection($request->user());
  19. return $next($request);
  20. }
  21. /**
  22. * Set up the tenant database connection
  23. */
  24. public function setupTenantConnection($user = null)
  25. {
  26. $user = $user ?: auth()->user();
  27. if ($user) {
  28. Log::info('Setting database connection', [
  29. 'database' => $user->tenant_database,
  30. 'username' => $user->tenant_username,
  31. 'password' => $user->tenant_password
  32. ]);
  33. $connection = [
  34. 'driver' => 'mysql',
  35. 'host' => '127.0.0.1',
  36. 'port' => '3306',
  37. 'database' => $user->tenant_database,
  38. 'username' => $user->tenant_username,
  39. 'password' => $user->tenant_password,
  40. ];
  41. config(['database.connections.tenant' => $connection]);
  42. config(['database.default' => 'tenant']);
  43. DB::purge('tenant');
  44. DB::reconnect('tenant');
  45. session(['currentClient' => $user->tenant_database]);
  46. session(['db_connection' => $connection]);
  47. Log::info('Current database after setup: ' . DB::connection()->getDatabaseName());
  48. Log::info('Current default connection: ' . DB::getDefaultConnection());
  49. }
  50. }
  51. }