41 lines
1.9 KiB
PHP
41 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Middleware;
|
|
|
|
use App\Services\PortalProfileAccess;
|
|
use Closure;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
|
|
class PortalProfileSession
|
|
{
|
|
public function handle(Request $request, Closure $next): Response
|
|
{
|
|
$access = app(PortalProfileAccess::class);
|
|
$available = $access->governanceAvailable();
|
|
if ($request->user() && (config('portal.profile_access_enabled') || config('portal.profile_administration_enabled')) && ! $available) {
|
|
$recovery = $request->is('management/profile-install', 'management/profile-install/bootstrap')
|
|
|| ($request->is('logout') && $request->isMethod('POST'));
|
|
abort_if(! in_array($request->method(), ['GET', 'HEAD', 'OPTIONS'], true) && ! $recovery, 503,
|
|
'Autorizações indisponíveis: recuperar a consistência dos perfis antes de gravar. Pode terminar a sessão ou consultar o instalador.');
|
|
}
|
|
if ($request->user() && $available) {
|
|
$revision = (int) DB::table('users')->where('id', $request->user()->id)->value('portal_access_revision');
|
|
$bound = $request->session()->get('portal.access_revision');
|
|
if (($bound === null && $revision > 0) || ($bound !== null && (int) $bound !== $revision)) {
|
|
Auth::guard('web')->logout();
|
|
$request->session()->invalidate();
|
|
$request->session()->regenerateToken();
|
|
|
|
return $request->expectsJson() ? response()->json(['message' => 'A autorização foi alterada. Inicie uma nova sessão.'], 401)
|
|
: redirect('/login')->withErrors(['email' => 'A autorização foi alterada. Inicie uma nova sessão.']);
|
|
}
|
|
$request->session()->put('portal.access_revision', $revision);
|
|
}
|
|
|
|
return $next($request);
|
|
}
|
|
}
|