php-tenant/Middleware/ResolveNamespace.php
Snider d0ad2737cb refactor: rename namespace from Core\Mod\Tenant to Core\Tenant
Simplifies the namespace hierarchy by removing the intermediate Mod
segment. Updates all 118 files including models, services, controllers,
middleware, tests, and composer.json autoload configuration.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:30:46 +00:00

59 lines
1.8 KiB
PHP

<?php
declare(strict_types=1);
namespace Core\Tenant\Middleware;
use Closure;
use Core\Tenant\Services\NamespaceService;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
/**
* Middleware to resolve the current namespace from session/request.
*
* Sets the current namespace in request attributes for use by
* BelongsToNamespace trait and other components.
*/
class ResolveNamespace
{
public function __construct(
protected NamespaceService $namespaceService
) {}
/**
* Handle an incoming request.
*/
public function handle(Request $request, Closure $next): Response
{
// Try to resolve namespace from query parameter first
if ($namespaceUuid = $request->query('namespace')) {
$namespace = $this->namespaceService->findByUuid($namespaceUuid);
if ($namespace && $this->namespaceService->canAccess($namespace)) {
// Store in session for subsequent requests
$this->namespaceService->setCurrent($namespace);
$request->attributes->set('current_namespace', $namespace);
return $next($request);
}
}
// Try to resolve namespace from header (for API requests)
if ($namespaceUuid = $request->header('X-Namespace')) {
$namespace = $this->namespaceService->findByUuid($namespaceUuid);
if ($namespace && $this->namespaceService->canAccess($namespace)) {
$request->attributes->set('current_namespace', $namespace);
return $next($request);
}
}
// Try to resolve from session
$namespace = $this->namespaceService->current();
if ($namespace) {
$request->attributes->set('current_namespace', $namespace);
}
return $next($request);
}
}