route()?->getName(); if (is_string($routeName) && str_contains($routeName, '.auth.')) { return $next($request); } $path = '/'.ltrim($request->path(), '/'); if (str_starts_with($path, '/admin/t/')) { return $next($request); } if (in_array($path, ['/admin/no-access', '/admin/choose-workspace'], true)) { return $next($request); } $user = $request->user(); if (! $user instanceof User) { return $next($request); } /** @var WorkspaceContext $context */ $context = app(WorkspaceContext::class); $workspace = $context->resolveInitialWorkspaceFor($user, $request); if ($workspace !== null) { return $next($request); } $membershipQuery = WorkspaceMembership::query()->where('user_id', $user->getKey()); $hasAnyActiveMembership = Schema::hasColumn('workspaces', 'archived_at') ? $membershipQuery ->join('workspaces', 'workspace_memberships.workspace_id', '=', 'workspaces.id') ->whereNull('workspaces.archived_at') ->exists() : $membershipQuery->exists(); $target = $hasAnyActiveMembership ? '/admin/choose-workspace' : '/admin/no-access'; return new HttpResponse('', 302, ['Location' => $target]); } }