LMIV-SNACKAUTOMAT/app/Http/Middleware/TenantScope.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);
}
}