- L'utenza del sorvegliante ha un'email fittizia creata dall'app: iniziale del nome e cognome @termanager.it (ffontana@termanager.it), come gli altri utenti. Via il nome utente: login di nuovo per email. - Sciolto il gruppo l'utenza si elimina, il sorvegliante torna un proclamatore come gli altri: assegnazioni a chi scioglie, registro a nome "Sorvegliante del gruppo ...". Via le utenze disattivate. - User::eliminaConservandoStorico(): l'eliminazione della pagina Utenti in un metodo solo, usato anche dallo scioglimento. - Migrazione 000030: elimina le utenze gia' disattivate, toglie users.username e users.disattivato_at, email di nuovo obbligatoria. - XML, informativa privacy, README, HANDOFF e test aggiornati. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
56 lines
1.6 KiB
PHP
56 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Middleware;
|
|
|
|
use Closure;
|
|
use Illuminate\Http\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
|
|
/**
|
|
* Il sorvegliante di gruppo vede solo il proprio gruppo e il proprio
|
|
* profilo. La Home lo porta a "Il mio gruppo"; ogni altra pagina è 403,
|
|
* anche scrivendone l'indirizzo a mano. Le azioni Livewire passano: i
|
|
* componenti che può aprire controllano da sé che territori e assegnazioni
|
|
* siano del suo gruppo, e gli altri non può caricarli.
|
|
*
|
|
* Vale solo per chi ha il ruolo sorvegliante e nessun altro: un utente con
|
|
* anche un altro ruolo resta regolato dai permessi di quel ruolo. Sciolto il
|
|
* gruppo l'utenza si elimina: una sessione ancora aperta non ha più utente.
|
|
*/
|
|
class LimitaSorvegliante
|
|
{
|
|
private const ROTTE_AMMESSE = [
|
|
'mio-gruppo',
|
|
'mio-gruppo.*',
|
|
'assegnazioni.rientra',
|
|
'profile',
|
|
'password.change',
|
|
'password.change.store',
|
|
'logout',
|
|
'verification.*',
|
|
'livewire.*',
|
|
];
|
|
|
|
public function handle(Request $request, Closure $next): Response
|
|
{
|
|
$user = $request->user();
|
|
if (! $user) {
|
|
return $next($request);
|
|
}
|
|
|
|
if (! $user->isSorvegliante() || $user->roles->count() > 1) {
|
|
return $next($request);
|
|
}
|
|
|
|
if ($request->routeIs(self::ROTTE_AMMESSE)) {
|
|
return $next($request);
|
|
}
|
|
|
|
if ($request->routeIs('dashboard')) {
|
|
return redirect()->route('mio-gruppo');
|
|
}
|
|
|
|
abort(403, 'Il sorvegliante di gruppo può usare solo la pagina del proprio gruppo.');
|
|
}
|
|
}
|