|
|
@@ -1,61 +1,58 @@
|
|
|
<?php
|
|
|
|
|
|
namespace App\Http\Middleware;
|
|
|
-use Illuminate\Support\Facades\Auth;
|
|
|
+
|
|
|
use Closure;
|
|
|
use Illuminate\Http\Request;
|
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
|
-use Illuminate\Support\Facades\Route;
|
|
|
-use Illuminate\Routing\Redirect;
|
|
|
-use Illuminate\Support\Facades\Config;
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
+use Illuminate\Support\Facades\Log;
|
|
|
|
|
|
class TenantMiddleware
|
|
|
{
|
|
|
/**
|
|
|
* Handle an incoming request.
|
|
|
- *
|
|
|
- * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
|
|
|
*/
|
|
|
public function handle(Request $request, Closure $next): Response
|
|
|
{
|
|
|
- //return $next($request);
|
|
|
- //$user = Auth::user(); // oppure $request->user()
|
|
|
-
|
|
|
- // Esempio: controlla se l'utente è admin
|
|
|
if (! $request->user()) {
|
|
|
- return redirect('/');
|
|
|
+ return redirect('/');
|
|
|
}
|
|
|
-
|
|
|
- $this->setDatabase($request->user());
|
|
|
+
|
|
|
+ $this->setupTenantConnection($request->user());
|
|
|
|
|
|
return $next($request);
|
|
|
- //abort(403); // accesso negato
|
|
|
}
|
|
|
|
|
|
- function setDatabase($user)
|
|
|
+ /**
|
|
|
+ * Set up the tenant database connection
|
|
|
+ */
|
|
|
+ public function setupTenantConnection($user = null)
|
|
|
{
|
|
|
-
|
|
|
- // Recupero i dati di connessione
|
|
|
- $database = $user->tenant_database;
|
|
|
- $username = $user->tenant_username;
|
|
|
- $password = $user->tenant_password;
|
|
|
-
|
|
|
- $connectionName = 'mysql';
|
|
|
- $config = Config::get('database.connections.' . $connectionName);
|
|
|
- $config = [
|
|
|
- 'driver' => 'mysql',
|
|
|
- 'host' => '127.0.0.1',
|
|
|
- 'port' => '3306',
|
|
|
- 'database' => $database,
|
|
|
- 'username' => $username,
|
|
|
- 'password' => $password
|
|
|
- ];
|
|
|
- config()->set('database.connections.' . $connectionName, $config);
|
|
|
- DB::purge($connectionName);
|
|
|
-
|
|
|
- //DB::setDefaultConnection('mysql');
|
|
|
+ $user = $user ?: auth()->user();
|
|
|
|
|
|
- }
|
|
|
+ if ($user) {
|
|
|
+ Log::info('Setting database connection', [
|
|
|
+ 'database' => $user->tenant_database,
|
|
|
+ 'username' => $user->tenant_username,
|
|
|
+ 'password' => $user->tenant_password
|
|
|
+ ]);
|
|
|
+
|
|
|
+ config(['database.connections.tenant' => [
|
|
|
+ 'driver' => 'mysql',
|
|
|
+ 'host' => '127.0.0.1',
|
|
|
+ 'port' => '3306',
|
|
|
+ 'database' => $user->tenant_database,
|
|
|
+ 'username' => $user->tenant_username,
|
|
|
+ 'password' => $user->tenant_password,
|
|
|
+ ]]);
|
|
|
+
|
|
|
+ config(['database.default' => 'tenant']);
|
|
|
+ DB::purge('tenant');
|
|
|
+ DB::reconnect('tenant');
|
|
|
|
|
|
+ Log::info('Current database after setup: ' . DB::connection()->getDatabaseName());
|
|
|
+ Log::info('Current default connection: ' . DB::getDefaultConnection());
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|