@@ -0,0 +1,40 @@
|
||||
<?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->available();
|
||||
if ($request->user() && config('portal.profile_access_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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user