TenantMiddleware.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. namespace App\Http\Middleware;
  3. use Illuminate\Support\Facades\Auth;
  4. use Closure;
  5. use Illuminate\Http\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Illuminate\Support\Facades\Route;
  8. use Illuminate\Routing\Redirect;
  9. use Illuminate\Support\Facades\Config;
  10. use Illuminate\Support\Facades\DB;
  11. class TenantMiddleware
  12. {
  13. /**
  14. * Handle an incoming request.
  15. *
  16. * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
  17. */
  18. public function handle(Request $request, Closure $next): Response
  19. {
  20. //return $next($request);
  21. //$user = Auth::user(); // oppure $request->user()
  22. // Esempio: controlla se l'utente è admin
  23. if (! $request->user()) {
  24. return redirect('/');
  25. }
  26. $this->setDatabase($request->user());
  27. return $next($request);
  28. //abort(403); // accesso negato
  29. }
  30. function setDatabase($user)
  31. {
  32. // Recupero i dati di connessione
  33. $database = $user->tenant_database;
  34. $username = $user->tenant_username;
  35. $password = $user->tenant_password;
  36. $connectionName = 'mysql';
  37. $config = Config::get('database.connections.' . $connectionName);
  38. $config = [
  39. 'driver' => 'mysql',
  40. 'host' => '127.0.0.1',
  41. 'port' => '3306',
  42. 'database' => $database,
  43. 'username' => $username,
  44. 'password' => $password
  45. ];
  46. config()->set('database.connections.' . $connectionName, $config);
  47. DB::purge($connectionName);
  48. //DB::setDefaultConnection('mysql');
  49. }
  50. }