File: /var/www/gestion-formularios.bdfschool/app/Http/Middleware/UsersAuth.php
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class UsersAuth
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next, ...$permissions)
{
if (auth()->check()) {
if (auth()->user()->deleted) {
auth()->logout();
return redirect(route('login'))->with(['error_message' => 'Su cuenta ha sido eliminada'])->with(['error_message_title' => 'ERROR DE VALIDACIÓN']);
}
// Manejar redirección si viene desde el correo
if ($request->query('from_email')) {
$register_id = $request->query('id');
$request->session()->put('from_email', true);
$request->session()->put('register_id', $register_id);
}
// Verificar permiso si se proporciona
if(auth()->user()->profile_id != 1){
if ($permissions) {
$hasPermission = false;
foreach ($permissions as $permission) {
if (auth()->user()->hasPermission($permission)) {
$hasPermission = true;
break;
}
}
if (!$hasPermission) {
return redirect(route('dashboard'))->with([
'danger_message' => 'No tienes los permisos necesarios',
'danger_message_title' => 'ERROR DE VALIDACIÓN'
]);
}
}
}
if(!auth()->user()->account_confirmed){
return redirect(route('logout'))->with(['warning_message' => 'Su cuenta aún no ha sido confirmada.'])->with(['warning_message_title' => 'Cuenta no confirmada']);
}
if(auth()->user()->validate_password){
return redirect(route('change-password-required'))->with(['warning_message' => 'Realice el cambio de contraseña para continuar'])->with(['warning_message_title' => 'Cambio de Contraseña Obligatorio']);
}
if(empty(auth()->user()->connection_token) || auth()->user()->connection_token != session('connection')){
return redirect(route('session-finish'));
}
return $next($request);
} else {
return redirect(route('login'));
}
}
}