diff --git a/HANDOFF.md b/HANDOFF.md index af85aaa..f36a1d6 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -167,10 +167,15 @@ quale. Tre ritocchi minori ma con qualche implicazione: - **Pagina profilo** (`Profile` → rotta `profilo`, nome `profile`) accessibile a - ogni utente loggato (nel gruppo `auth`, nessun permesso): mostra nome, email e - qualifica del solo utente corrente (sola lettura). Nell'header il blocco utente - è ora un link a questa pagina, con nome in evidenza ed `email · qualifica` - sotto. Non esiste un campo "username": l'email fa da identificativo. + ogni utente loggato (nel gruppo `auth`, nessun permesso): l'utente corrente può + modificare il proprio nome/cognome ed email (`updateProfile`) e cambiare la + password (`updatePassword`, con verifica della password attuale via regola + `current_password`; il cast `hashed` cifra al salvataggio). Nell'header il + blocco utente è un link a questa pagina, con nome in evidenza ed + `email · qualifica` sotto. Non esiste un campo "username" né "cognome" + separato: `name` è il nome completo (etichettato "Nome e cognome") e l'email fa + da identificativo. La qualifica (ruolo) non è modificabile dal profilo — resta + in gestione all'admin. - **Viewer PDF pubblico**: oltre a territorio/proclamatore/data mostra ora *giorni assegnato*, *consegna prevista* e *scadenza*. Sono attributi calcolati su `Assegnazione` (`data_consegna_presunta`, `giorni_alla_scadenza`) basati diff --git a/app/Livewire/Profile.php b/app/Livewire/Profile.php index 88a802e..d21f60b 100644 --- a/app/Livewire/Profile.php +++ b/app/Livewire/Profile.php @@ -2,10 +2,61 @@ namespace App\Livewire; +use Illuminate\Validation\Rule; use Livewire\Component; class Profile extends Component { + public string $name = ''; + public string $email = ''; + + public string $current_password = ''; + public string $password = ''; + public string $password_confirmation = ''; + + public function mount(): void + { + $user = auth()->user(); + $this->name = $user->name; + $this->email = $user->email; + } + + public function updateProfile(): void + { + $user = auth()->user(); + + $validated = $this->validate([ + 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'email', 'max:255', Rule::unique('users', 'email')->ignore($user->id)], + ]); + + $user->update([ + 'name' => $validated['name'], + 'email' => $validated['email'], + ]); + + session()->flash('profile_success', 'Profilo aggiornato con successo.'); + } + + public function updatePassword(): void + { + // `current_password` verifica che la password attuale digitata combaci + // con quella dell'utente loggato prima di consentire il cambio. + $this->validate([ + 'current_password' => ['required', 'current_password'], + 'password' => ['required', 'string', 'min:8', 'confirmed'], + ]); + + // Il cast `hashed` sul modello User cifra il valore in fase di salvataggio. + auth()->user()->update([ + 'password' => $this->password, + ]); + + $this->reset(['current_password', 'password', 'password_confirmation']); + + session()->flash('password_success', 'Password aggiornata con successo.'); + } + public function render() { return view('livewire.profile', [ diff --git a/resources/views/livewire/profile.blade.php b/resources/views/livewire/profile.blade.php index fb4493c..db205e5 100644 --- a/resources/views/livewire/profile.blade.php +++ b/resources/views/livewire/profile.blade.php @@ -7,9 +7,9 @@
Aggiorna nome e cognome ed email.
+ + @if(session('profile_success')) +Per motivi di sicurezza conferma la password attuale.
+ + @if(session('password_success')) +