35 lines
1.6 KiB
PHP
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);
|
|
}
|
|
}
|