user(); if (! $user) { return $next($request); } // If setup is completed, allow through if ($user->setup === Setup::Completed) { return $next($request); } // Map setup status to allowed routes $allowedRoutes = match ($user->setup) { Setup::Role => ['app.onboarding.role', 'app.onboarding.role.store'], Setup::Connections => ['app.onboarding.account', 'app.onboarding.account.store', 'app.social.*'], default => ['app.onboarding.role', 'app.onboarding.role.store'], }; $currentRoute = $request->route()?->getName(); // Check if current route is allowed foreach ($allowedRoutes as $pattern) { if ($currentRoute === $pattern || fnmatch($pattern, $currentRoute ?? '')) { return $next($request); } } // Redirect to appropriate step return match ($user->setup) { Setup::Role => redirect()->route('app.onboarding.role'), Setup::Connections => redirect()->route('app.onboarding.account'), default => redirect()->route('app.onboarding.role'), }; } }