++ informativa privacy aggiornata, valori dalle impostazioni
- Dati trattati attuali: email e telefono cifrati, link alla piantina, stato dell'invio, conferma email, log senza nomi. - Valori letti al momento: congregazione, conservazione del log, scadenza del link, download del PDF, server di posta, cifratura, durata della sessione, indirizzo/HTTPS, ruoli con i permessi veri, conteggi dei dati. - Servizi esterni: WhatsApp, posta, OpenStreetMap. - Dichiarato che backup ed export XML contengono i dati in chiaro. README e HANDOFF aggiornati. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,18 +2,86 @@
|
||||
|
||||
namespace App\Livewire;
|
||||
|
||||
use Livewire\Component;
|
||||
use App\Models\Assegnazione;
|
||||
use App\Models\Proclamatore;
|
||||
use App\Models\Setting;
|
||||
use App\Models\User;
|
||||
use App\Services\ConfigurazionePosta;
|
||||
use Livewire\Component;
|
||||
use Spatie\Activitylog\Models\Activity;
|
||||
use Spatie\Permission\Models\Role;
|
||||
|
||||
/**
|
||||
* Informativa privacy (solo amministratore).
|
||||
*
|
||||
* Tutto ciò che può cambiare si legge qui, al momento: impostazioni
|
||||
* (congregazione, conservazione del log, scadenza dei link, download del
|
||||
* PDF, server di posta), configurazione (indirizzo, cifratura, durata della
|
||||
* sessione), ruoli con i loro permessi reali e quanti dati sono conservati.
|
||||
* Il testo resta nella vista; i numeri non vanno mai scritti a mano.
|
||||
*/
|
||||
class Privacy extends Component
|
||||
{
|
||||
/** Data dell'ultima revisione del testo dell'informativa. */
|
||||
public const REVISIONE = '19 ottobre 2026';
|
||||
|
||||
/** I permessi spiegati a chi legge l'informativa. */
|
||||
public const PERMESSI = [
|
||||
'settings.manage' => 'impostazioni, utenti, backup e import',
|
||||
'proclamatori.manage' => 'anagrafica dei proclamatori, contatti compresi',
|
||||
'territori.manage' => 'gestione dei territori e delle piantine',
|
||||
'campagne.manage' => 'campagne',
|
||||
'registro.view' => 'consultazione del registro delle assegnazioni',
|
||||
'registro.export' => 'esportazione del registro',
|
||||
'territori.assign' => 'assegnazione dei territori',
|
||||
'territori.return' => 'rientro dei territori',
|
||||
'audit.view' => 'consultazione del registro delle attività',
|
||||
'audit.export' => 'esportazione del registro delle attività',
|
||||
];
|
||||
|
||||
public function render()
|
||||
{
|
||||
$settings = Setting::instance();
|
||||
$impostazioni = Setting::instance();
|
||||
$posta = app(ConfigurazionePosta::class);
|
||||
|
||||
$hostPosta = $posta->configurataNellApp()
|
||||
? (string) $impostazioni->mail_host
|
||||
: (string) config('mail.mailers.smtp.host');
|
||||
|
||||
$indirizzo = (string) config('app.url');
|
||||
|
||||
return view('livewire.privacy', [
|
||||
'congregazione' => $settings->congregazione_nome ?? 'Congregazione',
|
||||
'auditRetention' => $settings->audit_retention_days ?? 365,
|
||||
'revisione' => self::REVISIONE,
|
||||
'congregazione' => $impostazioni->congregazione_nome ?: 'Congregazione',
|
||||
'indirizzo' => $indirizzo,
|
||||
'https' => str_starts_with($indirizzo, 'https://'),
|
||||
'cifratura' => (string) config('app.cipher'),
|
||||
'durataSessione' => (int) config('session.lifetime'),
|
||||
'auditRetention' => (int) ($impostazioni->audit_retention_days ?: 365),
|
||||
'scadenzaLink' => max(1, (int) ($impostazioni->giorni_per_smarrito ?: 120)),
|
||||
'downloadPdf' => (bool) $impostazioni->pdf_viewer_show_download,
|
||||
'postaAttiva' => $posta->funzionante(),
|
||||
'hostPosta' => $hostPosta !== '' ? $hostPosta : null,
|
||||
'ruoli' => Role::with('permissions')->orderBy('name')->get()->map(fn (Role $r) => [
|
||||
'nome' => $r->name,
|
||||
'permessi' => $r->permissions->pluck('name')
|
||||
->map(fn ($p) => self::PERMESSI[$p] ?? $p)
|
||||
->all(),
|
||||
]),
|
||||
// Quanti dati sono conservati adesso. I campi cifrati restano NULL
|
||||
// quando sono vuoti, quindi si contano in SQL senza decifrare.
|
||||
'conteggi' => [
|
||||
'proclamatori' => Proclamatore::count(),
|
||||
'proclamatoriAttivi' => Proclamatore::where('attivo', true)->count(),
|
||||
'conEmail' => Proclamatore::whereNotNull('email')->count(),
|
||||
'conTelefono' => Proclamatore::whereNotNull('telefono')->count(),
|
||||
'anonimizzati' => Proclamatore::onlyTrashed()->count(),
|
||||
'utenti' => User::count(),
|
||||
'assegnazioni' => Assegnazione::count(),
|
||||
'assegnazioniAperte' => Assegnazione::aperte()->count(),
|
||||
'attivita' => Activity::count(),
|
||||
'attivitaDal' => Activity::min('created_at'),
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user