getHost(); $central = config('tenancy.central_domains', []); $centralPrimary = config('app.central_domain') ?: $central[0] ?? 'service.mir.md'; // No subdomain → central context. if (in_array($host, $central, true)) { // Tenant panel must never run on the central host. if (str_starts_with($request->path(), 'app')) { throw new NotFoundHttpException('Tenant routes are not available on the central domain.'); } return $next($request); } $slug = null; if (str_ends_with($host, ".{$centralPrimary}")) { $slug = substr($host, 0, -strlen(".{$centralPrimary}")); } if (! $slug || in_array($slug, self::RESERVED, true) || str_contains($slug, '.')) { // Reserved or multi-level subdomain → not a tenant. 404. throw new NotFoundHttpException("Unknown subdomain: {$host}"); } $company = Company::where('slug', $slug)->first(); if (! $company) { throw new NotFoundHttpException("Tenant '{$slug}' not found."); } app(TenantManager::class)->setCurrent($company); $request->attributes->set('tenant', $company); // Tell Spatie Permission to scope roles to this company. if (function_exists('app')) { app(\Spatie\Permission\PermissionRegistrar::class) ->setPermissionsTeamId($company->id); } if ($required === 'required' && ! app(TenantManager::class)->isResolved()) { throw new NotFoundHttpException(); } return $next($request); } }