++ cambio password obbligato: al primo accesso del sorvegliante dice "Password temporanea", non "Ripristino da backup"
users.password_temporanea distingue la password provvisoria data dall'amministratore (creazione del gruppo, "Nuova password temporanea") dal ripristino da backup. Migrazione 000040; si spegne a password cambiata, il ripristino e l'import XML la spengono per tutti. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -9,7 +9,9 @@ use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Validation\Rules\Password;
|
||||
|
||||
/**
|
||||
* Cambio password obbligatorio, imposto dopo il ripristino di un backup.
|
||||
* Cambio password obbligatorio, imposto dopo il ripristino di un backup o al
|
||||
* primo accesso con una password temporanea data dall'amministratore
|
||||
* (sorvegliante di gruppo): `password_temporanea` dice quale dei due.
|
||||
*
|
||||
* Volutamente NON e' un componente Livewire: la pagina deve restare
|
||||
* raggiungibile mentre RequirePasswordChange respinge tutto il resto, incluse
|
||||
@@ -27,6 +29,8 @@ class PasswordChangeController extends Controller
|
||||
// Chi arriva qui spontaneamente (dal profilo) puo' tornare indietro;
|
||||
// chi e' stato dirottato dal middleware no.
|
||||
'forced' => (bool) $user->password_change_required,
|
||||
// Perché: una password temporanea, oppure un ripristino da backup.
|
||||
'temporanea' => (bool) $user->password_temporanea,
|
||||
// Il ripristino gira in coda e non ha una sessione in cui lasciare
|
||||
// un flash; deposita l'esito in cache a nome di chi l'ha avviato e
|
||||
// lo si legge qui, che e' la prima pagina che quella persona vede.
|
||||
@@ -71,6 +75,7 @@ class PasswordChangeController extends Controller
|
||||
$user->update([
|
||||
'password' => $validated['password'],
|
||||
'password_change_required' => false,
|
||||
'password_temporanea' => false,
|
||||
]);
|
||||
|
||||
// La sessione corrente sopravvive al cambio, le altre no: dopo un
|
||||
|
||||
@@ -250,6 +250,9 @@ class RestoreBackupArchive implements ShouldQueue
|
||||
{
|
||||
DB::table('users')->update([
|
||||
'password_change_required' => true,
|
||||
// Il motivo ora è il ripristino, anche per chi aveva una
|
||||
// password temporanea (pagina del cambio password).
|
||||
'password_temporanea' => false,
|
||||
'remember_token' => null,
|
||||
]);
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@ class GruppoShow extends Component
|
||||
}
|
||||
|
||||
$password = Str::password(12, symbols: false);
|
||||
$utente->forceFill(['password' => $password, 'password_change_required' => true])->save();
|
||||
$utente->forceFill(['password' => $password, 'password_change_required' => true, 'password_temporanea' => true])->save();
|
||||
activity()->causedBy(auth()->user())->performedOn($utente)->log('password_reimpostata');
|
||||
|
||||
$this->passwordTemporanea = $password;
|
||||
|
||||
@@ -80,6 +80,7 @@ class Profile extends Component
|
||||
auth()->user()->update([
|
||||
'password' => $this->password,
|
||||
'password_change_required' => false,
|
||||
'password_temporanea' => false,
|
||||
]);
|
||||
|
||||
$this->reset(['current_password', 'password', 'password_confirmation']);
|
||||
|
||||
@@ -582,6 +582,7 @@ class XmlExchange extends Component
|
||||
if ($passwordHash !== '' && ! $eAttore) {
|
||||
$meta['password'] = $passwordHash;
|
||||
$meta['password_change_required'] = true;
|
||||
$meta['password_temporanea'] = false;
|
||||
}
|
||||
if (! $eAttore) {
|
||||
$meta['remember_token'] = null;
|
||||
|
||||
@@ -26,6 +26,7 @@ class User extends Authenticatable implements MustVerifyEmail
|
||||
'email',
|
||||
'password',
|
||||
'password_change_required',
|
||||
'password_temporanea',
|
||||
'proclamatore_id',
|
||||
];
|
||||
|
||||
@@ -40,6 +41,9 @@ class User extends Authenticatable implements MustVerifyEmail
|
||||
'email_verified_at' => 'datetime',
|
||||
'password' => 'hashed',
|
||||
'password_change_required' => 'boolean',
|
||||
// Il cambio obbligatorio viene da una password temporanea data
|
||||
// dall'amministratore, non da un ripristino (pagina del cambio).
|
||||
'password_temporanea' => 'boolean',
|
||||
'proclamatore_id' => 'integer',
|
||||
];
|
||||
}
|
||||
|
||||
@@ -65,6 +65,7 @@ class GruppiServizio
|
||||
'email' => self::emailFittizia($sorvegliante),
|
||||
'password' => $password,
|
||||
'password_change_required' => true,
|
||||
'password_temporanea' => true,
|
||||
'proclamatore_id' => $sorvegliante->id,
|
||||
]);
|
||||
$utente->assignRole('sorvegliante');
|
||||
|
||||
Reference in New Issue
Block a user