47 lines
1.6 KiB
PHP
47 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Middleware;
|
|
|
|
use Closure;
|
|
use Illuminate\Http\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
|
|
class TenantScope
|
|
{
|
|
/**
|
|
* Handle an incoming request.
|
|
*/
|
|
public function handle(Request $request, Closure $next): Response
|
|
{
|
|
$user = auth()->user();
|
|
|
|
if (!$user) {
|
|
return $next($request);
|
|
}
|
|
|
|
// Super-Admin: Muss einen Mandanten gewählt haben oder wird zur Auswahl geleitet
|
|
if ($user->isSuperAdmin()) {
|
|
$tenantId = session('current_tenant_id');
|
|
|
|
if (!$tenantId) {
|
|
// Wenn kein Mandant gewählt, zur Auswahl leiten (außer bei bestimmten Routen)
|
|
$allowedRoutes = ['tenants.select', 'tenants.switch', 'admin.tenants.index', 'admin.tenants.create', 'admin.tenants.store', 'admin.tenants.edit', 'admin.tenants.update', 'admin.tenants.destroy'];
|
|
|
|
if (!in_array($request->route()->getName(), $allowedRoutes)) {
|
|
return redirect()->route('tenants.select')
|
|
->with('error', 'Bitte wählen Sie einen Mandanten aus.');
|
|
}
|
|
} else {
|
|
// Setze den aktuellen Mandanten für Queries
|
|
app()->instance('current_tenant_id', $tenantId);
|
|
}
|
|
}
|
|
// Tenant-Admin: Verwende automatisch seinen Mandanten
|
|
elseif ($user->isTenantAdmin()) {
|
|
app()->instance('current_tenant_id', $user->tenant_id);
|
|
}
|
|
|
|
return $next($request);
|
|
}
|
|
}
|