Preserva base local aceite de identidade e acessos
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App\Modules\Identity\Http;
|
||||
|
||||
use App\Shared\Context\CompanyContext;
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
final class RequireCompanyContext
|
||||
{
|
||||
public function __construct(private CompanyContext $context) {}
|
||||
|
||||
public function handle(Request $request, Closure $next): Response
|
||||
{
|
||||
$this->context->clear();
|
||||
try {
|
||||
$selection = $request->session()->get('company_context', []);
|
||||
$tenant = $selection['tenant_id'] ?? null;
|
||||
$company = $selection['company_id'] ?? null;
|
||||
abort_unless($request->user() && $tenant && $company, 403, 'Contexto de empresa obrigatório.');
|
||||
$this->context->selectFor((int) $request->user()->getKey(), $tenant, $company, $selection['unit_id'] ?? null);
|
||||
if (! $request->isMethodSafe()) {
|
||||
$token = $request->header('X-SGF-Context');
|
||||
abort_unless(is_string($token) && hash_equals($selection['token'] ?? '', $token), 409, 'O contexto mudou. Reabra o formulário antes de guardar.');
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
} finally {
|
||||
$this->context->clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user