Files
2026-11-02 08:08:05 +02:00

35 lines
1.6 KiB
PHP

<?php
namespace Tempo\Purchasing\Delivery;
use App\Shared\Context\CompanyContext;
use App\Shared\Context\ModuleNavigation;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
final class RuntimeContext
{
public function handle(Request $request, Closure $next): mixed
{
abort_unless(config('purchasing-operational.enabled') === true, 404);
$context = app(CompanyContext::class);
Installation::assertBudgetReady(DB::connection());
$scope = $context->identifiers();
$policy = config('modules.companies.'.$scope['tenant_id'].':'.$scope['company_id'], []);
$contracted = $policy['contracted'] ?? config('modules.contracted', []);
abort_unless(in_array('purchasing', $contracted, true) && in_array('purchasing', $policy['enabled'] ?? $contracted, true), 403);
$initialisation = $request->is('purchasing/internal-requisitions/access-initialisation', 'api/internal-requisitions/access-initialisation');
if (! $initialisation) {
abort_unless($request->session()->get('company_context.module_id') === 'purchasing', 409, 'Seleccione o módulo Compras.');
abort_unless(in_array('purchasing', array_column(app(ModuleNavigation::class)->available($context), 'id'), true), 403);
}
if ($request->is('api/*')) {
$token = (string) $request->session()->get('company_context.token', '');
abort_unless($token !== '' && hash_equals($token, (string) $request->header('X-SGF-Context')), 409);
}
return $next($request);
}
}