TenantMiddleware.php 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. config(['database.connections.tenant' => [
  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.default' => 'tenant']);
  42. DB::purge('tenant');
  43. DB::reconnect('tenant');
  44. session(['currentClient' => $user->tenant_database]);
  45. Log::info('Current database after setup: ' . DB::connection()->getDatabaseName());
  46. Log::info('Current default connection: ' . DB::getDefaultConnection());
  47. }
  48. }
  49. }