|
|
@@ -0,0 +1,34 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace App\Http\Middleware;
|
|
|
+
|
|
|
+use Closure;
|
|
|
+use Illuminate\Http\Request;
|
|
|
+use Illuminate\Support\Facades\Auth;
|
|
|
+use Symfony\Component\HttpFoundation\Response;
|
|
|
+
|
|
|
+class ResolveActiveUnit
|
|
|
+{
|
|
|
+ /**
|
|
|
+ * Lê o header X-Unit-Id enviado pelo frontend, valida que a unidade
|
|
|
+ * pertence ao usuário autenticado e disponibiliza como active_unit_id
|
|
|
+ * na request para que os serviços possam usá-la ao filtrar dados.
|
|
|
+ */
|
|
|
+ public function handle(Request $request, Closure $next): Response
|
|
|
+ {
|
|
|
+ $unitId = $request->header('X-Unit-Id');
|
|
|
+
|
|
|
+ if ($unitId && Auth::check()) {
|
|
|
+ $user = Auth::user();
|
|
|
+ $user->loadMissing('units');
|
|
|
+
|
|
|
+ $validUnit = $user->units->firstWhere('id', (int) $unitId);
|
|
|
+
|
|
|
+ if ($validUnit) {
|
|
|
+ $request->merge(['active_unit_id' => $validUnit->id]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return $next($request);
|
|
|
+ }
|
|
|
+}
|