@chill-sharp/ui-core 1.1.12 → 1.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/README.md +103 -103
  2. package/fesm2022/chill-sharp-ui-core.mjs +2446 -2446
  3. package/fesm2022/chill-sharp-ui-core.mjs.map +1 -1
  4. package/lib/lib/chill-form.component.d.ts +1 -1
  5. package/package.json +3 -3
  6. package/service-worker/chill-sharp-service-worker.js +166 -166
  7. package/styles/core-theme.scss +1235 -1235
  8. package/.agents/skills/chillsharp-current-user-preferences/SKILL.md +0 -70
  9. package/.agents/skills/chillsharp-ui-template/SKILL.md +0 -18
  10. package/doc/AIAssistedDevelopment/README.md +0 -185
  11. package/doc/AttachmentModel/README.md +0 -173
  12. package/doc/AuthenticationModel/README.md +0 -213
  13. package/doc/AuthenticationModel/how-to-integreate-auth-minimal-api.md +0 -293
  14. package/doc/ChillSharpClient.md +0 -464
  15. package/doc/ClientGeneration/README.md +0 -172
  16. package/doc/ComplianceGuide/README.md +0 -178
  17. package/doc/Configuration/README.md +0 -94
  18. package/doc/CurrentUserPreferences.md +0 -114
  19. package/doc/DateTimePolicy/README.md +0 -154
  20. package/doc/DateTimeSerialization.md +0 -423
  21. package/doc/Endpoints.md +0 -260
  22. package/doc/HowTo/01-simple-blog-sqlite.md +0 -153
  23. package/doc/HowTo/02-blog-schema-labels.md +0 -140
  24. package/doc/HowTo/03-authentication.md +0 -218
  25. package/doc/HowTo/04-blog-posts-one-to-many.md +0 -194
  26. package/doc/HowTo/05-docker-env-variables.md +0 -274
  27. package/doc/HowTo/06-chunk-transactions-autocomplete.md +0 -196
  28. package/doc/Mcp/ChatGPT.md +0 -291
  29. package/doc/Mcp/README.md +0 -799
  30. package/doc/MenuGuide/README.md +0 -49
  31. package/doc/ModelPreparation.md +0 -255
  32. package/doc/PermissionModel/README.md +0 -277
  33. package/doc/README.md +0 -228
  34. package/doc/ReferenceExistence.md +0 -130
  35. package/doc/RegisterContext.md +0 -217
  36. package/doc/UiCore/CRUD.md +0 -170
  37. package/doc/UiCore/README.md +0 -13
  38. package/doc/ValidationModel/README.md +0 -117
  39. package/doc/it/AIAssistedDevelopment/README.md +0 -185
  40. package/doc/it/AttachmentModel/README.md +0 -173
  41. package/doc/it/AuthenticationModel/README.md +0 -171
  42. package/doc/it/AuthenticationModel/how-to-integreate-auth-minimal-api.md +0 -292
  43. package/doc/it/ChillSharpClient.md +0 -464
  44. package/doc/it/ClientGeneration/README.md +0 -152
  45. package/doc/it/ComplianceGuide/README.md +0 -178
  46. package/doc/it/Configuration/README.md +0 -94
  47. package/doc/it/CurrentUserPreferences.md +0 -114
  48. package/doc/it/DateTimePolicy/README.md +0 -154
  49. package/doc/it/DateTimeSerialization.md +0 -423
  50. package/doc/it/Endpoints.md +0 -260
  51. package/doc/it/HowTo/01-simple-blog-sqlite.md +0 -152
  52. package/doc/it/HowTo/02-blog-schema-labels.md +0 -139
  53. package/doc/it/HowTo/03-authentication.md +0 -221
  54. package/doc/it/HowTo/04-blog-posts-one-to-many.md +0 -193
  55. package/doc/it/HowTo/05-docker-env-variables.md +0 -268
  56. package/doc/it/HowTo/06-chunk-transactions-autocomplete.md +0 -196
  57. package/doc/it/Mcp/ChatGPT.md +0 -291
  58. package/doc/it/Mcp/README.md +0 -799
  59. package/doc/it/MenuGuide/README.md +0 -49
  60. package/doc/it/ModelPreparation.md +0 -254
  61. package/doc/it/PermissionModel/README.md +0 -190
  62. package/doc/it/README.md +0 -172
  63. package/doc/it/ReferenceExistence.md +0 -130
  64. package/doc/it/RegisterContext.md +0 -218
  65. package/doc/it/UiCore/CRUD.md +0 -170
  66. package/doc/it/UiCore/README.md +0 -13
  67. package/doc/it/ValidationModel/README.md +0 -117
  68. package/template-customization/upgrade.ps1.template +0 -342
  69. package/template-customization/upgrade.sh.template +0 -271
@@ -1,178 +0,0 @@
1
- # Guida alla sicurezza e alla conformità
2
-
3
- Versione originale in inglese: [English](../../ComplianceGuide/README.md)
4
-
5
-
6
- Questo documento spiega come ChillSharp può supportare programmi di sicurezza e conformità come NIS2, ISO 27001, SOC 2 o policy interne di sviluppo sicuro.
7
-
8
- È intenzionalmente generico: i quadri di conformità differiscono in base alla giurisdizione e al settore, ma molti dei controlli tecnici sottostanti sono gli stessi.
9
-
10
- Importante: ChillSharp può aiutarti a implementare e applicare automaticamente diversi controlli tecnici, ma l'utilizzo di ChillSharp non rende di per sé conforme un'applicazione. La conformità dipende ancora dall'ambiente di hosting, dalle procedure operative, dal monitoraggio, dalla risposta agli incidenti, dalla strategia di backup e dall'ambito legale.
11
-
12
- ## Dove ChillSharp aiuta
13
-
14
- ChillSharp è utile quando desideri che il tuo livello API applichi le stesse convenzioni di convalida, autorizzazione, metadati e controllo in modo coerente nell'intero modello invece di reimplementarle controller per controller.
15
-
16
- Questa coerenza è importante nel lavoro di conformità perché molti risultati derivano da lacune tra endpoint, controlli dimenticati in un percorso di aggiornamento o comportamento dell'interfaccia utente e dell'API che si allontana nel tempo.
17
-
18
- ## Aree di controllo supportate da ChillSharp
19
-
20
- ### 1. Convalida dell'input e integrità dei dati
21
-
22
- ChillSharp aiuta a ridurre i dati non validi o non sicuri che entrano nel sistema centralizzando la convalida attorno all'entità e al modello di query.
23
-
24
- - Annotazioni dati standard come `[Required]`, `[StringLength]`, `[Range]` e `[EmailAddress]` possono essere applicate ai membri `[ChillProperty]`
25
- - la pipeline di convalida viene eseguita durante i flussi `VALIDATE()` espliciti
26
- - la stessa validazione viene eseguita automaticamente anche quando il client passa direttamente alla creazione o all'aggiornamento
27
- - È possibile aggiungere la convalida aziendale personalizzata tramite `OnValidation()`
28
-
29
- Ciò supporta gli obiettivi di controllo generalmente descritti come:
30
-
31
- - convalida dell'input
32
- - applicazione della qualità dei dati
33
- - Convalida lato server sicura per impostazione predefinita
34
- - riduzione della convalida incoerente tra gli endpoint
35
-
36
- Riferimento:
37
- - [../ValidationModel/README.md](../ValidationModel/README.md)
38
-
39
- ### 2. Autenticazione e accesso controllato
40
-
41
- Con `ChillSharp.Auth`, l'host può esporre flussi di account supportati da identità per:
42
-
43
- - registrazione
44
- - login
45
- - gestione del token di aggiornamento
46
- - cambio password
47
- - reimpostazione della password
48
-
49
- Ciò aiuta a standardizzare il livello di accesso ed evitare endpoint di autenticazione ad hoc con comportamenti incoerenti.
50
-
51
- Riferimento:
52
- - [../AuthenticationModel/README.md](../AuthenticationModel/README.md)
53
-
54
- ### 3. Autorizzazione e privilegio minimo
55
-
56
- ChillSharp fornisce un modello di autorizzazione con rifiuto predefinito con:
57
-
58
- - autorizzazioni utente
59
- - autorizzazioni di ruolo
60
- - ambiti di modulo, entità e proprietà
61
- - consentire/negare le regole
62
- - regole di precedenza esplicite
63
-
64
- Ciò è utile per i programmi di conformità che prevedono l'accesso con privilegi minimi, la separazione dei compiti e una chiara applicazione lato server di chi può visualizzare o modificare i dati.
65
-
66
- Poiché le autorizzazioni a livello di proprietà fanno parte del modello, ChillSharp può aiutare a ridurre un rischio comune: gli utenti hanno accesso all'entità giusta ma hanno troppo accesso ai campi sensibili.
67
-
68
- Riferimento:
69
- - [../PermissionModel/README.md](../PermissionModel/README.md)
70
-
71
- ### 4. Campi di controllo sulle modifiche dei dati
72
-
73
- `ChillEntity` mantiene automaticamente:
74
-
75
- -
76
- -
77
- -
78
- -
79
-
80
- Questi valori vengono aggiornati come parte del percorso di runtime utilizzato da ChillSharp durante gli aggiornamenti, il che aiuta a imporre un audit trail minimo coerente senza dipendere da ogni entità derivata per ricordarsi di farlo manualmente.
81
-
82
- Ciò supporta obiettivi di controllo comuni quali:
83
-
84
- - tracciabilità delle modifiche
85
- - responsabilità delle azioni dell'utente
86
- - controllo di integrità di base
87
- - evidenza che i documenti sono stati modificati, quando e da chi
88
-
89
- Il checksum è particolarmente utile come segnale di integrità leggero per scenari di sincronizzazione, confronti e rilevamento di manomissioni all'interno del modello applicativo.
90
-
91
- Riferimento:
92
- - [../README.md](../README.md#audit-fields)
93
-
94
- ### 5. Metadati dello schema coerenti e generazione di client più sicura
95
-
96
- ChillSharp può esporre metadati dello schema e generare client dalla descrizione dell'API.
97
-
98
- Ciò non sostituisce di per sé un controllo di sicurezza, ma può ridurre la deriva dell'implementazione tra:
99
-
100
- - Convalida backend e moduli frontend
101
- - Autorizzazione backend e funzionalità frontend
102
- - Contratti API effettivi e client scritti a mano
103
-
104
- Ridurre i problemi di deriva negli audit perché client incoerenti e colla API duplicata spesso creano eccezioni nascoste al modello di controllo previsto.
105
-
106
- Riferimento:
107
- - [../ClientGeneration/README.md](../ClientGeneration/README.md)
108
-
109
- ## Perché questo è importante per NIS2 e framework simili
110
-
111
- Framework come NIS2 di solito non certificano una libreria. Si aspettano che le organizzazioni implementino misure tecniche e organizzative basate sul rischio.
112
-
113
- In tale contesto, ChillSharp è meglio inteso come un componente di applicazione del controllo che può aiutare con:
114
-
115
- - controllo dell'identità e degli accessi
116
- - privilegio minimo
117
- - tracciabilità degli aggiornamenti
118
- - validazione coerente dei dati in ingresso
119
- - riduzione della sicurezza manuale idraulica
120
-
121
- Ciò può ridurre la probabilità di difetti di implementazione comuni e rendere l'applicazione più facile da rivedere durante gli audit interni o le valutazioni esterne.
122
-
123
- ## Cosa ChillSharp non risolve da solo
124
-
125
- È ancora necessario progettare e gestire il sistema di sicurezza più ampio attorno alla biblioteca. In particolare, ChillSharp non fornisce di per sé:
126
-
127
- - una strategia SIEM completa o di registrazione di sicurezza centralizzata
128
- - procedure di rilevamento e risposta agli incidenti
129
- - gestione delle vulnerabilità e governance delle patch
130
- - rafforzamento delle infrastrutture
131
- - segmentazione della rete
132
- - configurazione della sicurezza del trasporto
133
- - gestione delle chiavi di crittografia
134
- - gestione dei segreti
135
- - processi di backup e disaster recovery
136
- - Politica del MAE e governance dell'identità aziendale
137
- - gestione del rischio fornitori
138
- - interpretazione giuridica di NIS2 o di qualsiasi altro regolamento
139
-
140
- Questi controlli appartengono in parte alla tua applicazione, ma soprattutto alla tua piattaforma e ai processi organizzativi.
141
-
142
- ## Posizionamento consigliato nella documentazione di revisione
143
-
144
- Quando si documenta ChillSharp in una revisione della sicurezza, descriverlo come:
145
-
146
- - un framework che centralizza la convalida delle API
147
- - un framework che impone l'autorizzazione basata su ruoli e proprietà
148
- - un framework che mantiene i metadati di controllo di base sugli aggiornamenti dell'entità
149
- - un framework che riduce il codice CRUD personalizzato incoerente
150
-
151
- Evita affermazioni più forti come:
152
-
153
- - "l'applicazione è compatibile con NIS2 perché utilizza ChillSharp"
154
- - "ChillSharp garantisce la conformità normativa"
155
-
156
- L’affermazione più forte e più difendibile è:
157
-
158
- "ChillSharp aiuta a implementare e automatizzare diversi controlli tecnici comunemente richiesti dai framework di sicurezza e conformità, mentre la conformità finale dipende dalla progettazione dell'intero sistema e dal modello operativo."
159
-
160
- ## Lista di controllo pratica
161
-
162
- Se desideri utilizzare ChillSharp come parte di un'architettura orientata alla conformità, la linea di base è:
163
-
164
- 1. utilizzare `ChillEntity` e annotare le proprietà esposte con `[ChillProperty]`
165
- 2. aggiungere DataAnnotations e regole `OnValidation()` personalizzate per i vincoli aziendali
166
- 3. abilitare `ChillSharp.Auth` per i sistemi autenticati
167
- 4. configurare ruoli e regole di autorizzazione con atteggiamento di rifiuto predefinito
168
- 5. verifica che `GetCurrentUserName()` sia correttamente implementato nel tuo `IChillContext`
169
- 6. preservare e monitorare `LastUpdate`, `LastUpdateUtcOffset`, `LastUpdateUser` e `Checksum`
170
- 7. proteggere l'host con HTTPS, registrazione, backup, patch e controlli operativi esterni a ChillSharp
171
-
172
- ## Documenti correlati
173
-
174
- - [../ValidationModel/README.md](../ValidationModel/README.md)
175
- - [../AuthenticationModel/README.md](../AuthenticationModel/README.md)
176
- - [../PermissionModel/README.md](../PermissionModel/README.md)
177
- - [../ClientGeneration/README.md](../ClientGeneration/README.md)
178
- - [../RegisterContext.md](../RegisterContext.md)
@@ -1,94 +0,0 @@
1
- # Riferimento alla configurazione di ChillSharp
2
-
3
- Versione originale in inglese: [English](../../Configuration/README.md)
4
-
5
-
6
- Questo documento elenca le variabili di ambiente attualmente utilizzate da ChillSharp e dall'host ChillSharp di esempio in `ChillSharp.Examples/BloggingApiService`.
7
-
8
- Utilizzalo come riferimento rapido durante la configurazione di Docker, `docker compose` o un'altra destinazione di distribuzione.
9
-
10
- All'avvio, `AddChillApi<TContext>()` scrive tutte le variabili di ambiente del processo `CHILLSHARP_` e `CHILL_SHARP_` nella console. I nomi delle variabili contenenti `PASSWORD` vengono mascherati come `********`.
11
-
12
- ## Ospitalità
13
-
14
- | Opzione | Variabile ENV | Descrizione | Predefinito |
15
- | --- | --- | --- | --- |
16
- | URL di ascolto ASP.NET Core | | URL associati dall'host ASP.NET Core. | |
17
- | Ambiente ASP.NET Core | | Nome dell'ambiente ASP.NET Core standard. | `Development` nell'esempio `.env` |
18
-
19
- ## API principale
20
-
21
- | Opzione | Variabile ENV | Descrizione | Predefinito |
22
- | --- | --- | --- | --- |
23
- | Percorso del database SQLite | | Percorso del file utilizzato dal database SQLite di esempio `BloggingContext`. | |
24
- | Cultura primaria | | Valore restituito da `IChillContext.GetPrimaryCultureName()`. | |
25
- | Cultura secondaria | | Valore restituito da `IChillContext.GetSecondaryCultureName()`. | |
26
- | API principale protetta | | Richiede l'autenticazione per l'API ChillSharp principale quando `true`. | `true` quando l'autenticazione è abilitata |
27
- | Fuso orario del sistema DTO | | ID fuso orario IANA utilizzato dagli helper di analisi e serializzazione ChillSharp DTO `DateTime` e `DateTimeOffset`. | ZZGETTONE PROTETTO3ZZ |
28
-
29
- ## Attiva/disattiva il modulo
30
-
31
- | Opzione | Variabile ENV | Descrizione | Predefinito |
32
- | --- | --- | --- | --- |
33
- | Abilita modulo schema | | Registra i servizi `ChillSharp.Schema`. | |
34
- | Abilita modulo di autenticazione | | Registra l'account `ChillSharp.Auth` e i servizi di gestione dell'autenticazione. | |
35
- | Abilita modulo i18n | | Registra i servizi `ChillSharp.I18n`. | |
36
- | Abilita modulo MCP | | Registra i servizi `ChillSharp.Mcp` e mappa l'endpoint MCP quando il contesto host supporta i metadati dello schema. | |
37
- | Abilita modulo allegati | | Registra i servizi e gli endpoint `ChillSharp.Attachment` quando il contesto host supporta gli allegati. | `false` nell'host di esempio, imposta `true` quando il contesto implementa gli allegati |
38
-
39
- ## Archiviazione degli allegati
40
-
41
- | Opzione | Variabile ENV | Descrizione | Predefinito |
42
- | --- | --- | --- | --- |
43
- | Radice archivio allegati | | Cartella principale utilizzata da `ChillSharp.Attachment` per leggere e archiviare file archiviati. | `attachments` nella directory di base dell'host |
44
-
45
- ## Token di autenticazione e flussi di password
46
-
47
- | Opzione | Variabile ENV | Descrizione | Predefinito |
48
- | --- | --- | --- | --- |
49
- | Durata del token di accesso | | Minuti prima della scadenza del token di accesso portatore ChillSharp. Leggere direttamente da `ChillAuthIdentityApiOptions` e `ChillIdentityApiOptions` a meno che l'host non sovrascriva `AccessTokenLifetime` nel codice. | ZZGETTONE PROTETTO4ZZ |
50
- | Durata del token di aggiornamento | | Giorni prima della scadenza del token di aggiornamento. Leggere direttamente da `ChillAuthIdentityApiOptions` e `ChillIdentityApiOptions` a meno che l'host non sovrascriva `RefreshTokenLifetime` nel codice. | ZZGETTONE PROTETTO4ZZ |
51
- | Restituisci il token di reimpostazione nella risposta API | | Include `userId` e `resetToken` nella risposta `/api/chill-auth/account/request-password-reset` quando `true`. | `false` nell'host di esempio |
52
- | Invia e-mail di reimpostazione della password | | Invia un'e-mail di reimpostazione della password tramite SMTP quando `true`. | `false` nel codice, `true` nell'esempio `.env` |
53
- | Oggetto dell'e-mail di reimpostazione della password | | Oggetto utilizzato per le email di reimpostazione della password. | |
54
- | URL di reimpostazione password | | URL frontend facoltativo utilizzato per creare un collegamento selezionabile per la reimpostazione della password con `userId` e `resetToken`. | non impostato |
55
-
56
- ## Consegna con reimpostazione password SMTP
57
-
58
- | Opzione | Variabile ENV | Descrizione | Predefinito |
59
- | --- | --- | --- | --- |
60
- | Host SMTP | | Nome host del server SMTP utilizzato per la consegna senza risposta con reimpostazione della password. | non impostato |
61
- | Porta SMTP | | Porta del server SMTP. | |
62
- | SMTP SSL/TLS | | Abilita SSL/TLS sul client SMTP quando `true`. | |
63
- | Nome utente SMTP | | Nome utente di autenticazione SMTP. | non impostato |
64
- | Password SMTP | | Password di autenticazione SMTP. | non impostato |
65
- | E-mail del mittente senza risposta | | Indirizzo e-mail del mittente utilizzato per le e-mail di reimpostazione della password. | non impostato |
66
- | Nome visualizzato del mittente senza risposta | | Nome visualizzato del mittente utilizzato per le e-mail di reimpostazione della password. | non impostato |
67
-
68
- Quando `CHILLSHARP_AUTH_SEND_PASSWORD_RESET_EMAILS=true`, l'host SMTP e l'e-mail del mittente devono essere configurati altrimenti il ​​flusso di reimpostazione non riuscirà.
69
-
70
- ## Bootstrap utente root
71
-
72
- Queste variabili vengono lette da `ChillAuthRootUserInitializer<TUser>` durante l'avvio quando è abilitata l'inizializzazione dell'utente root.
73
-
74
- | Opzione | Variabile ENV | Descrizione | Predefinito |
75
- | --- | --- | --- | --- |
76
- | Inizializza l'utente root | | Crea l'utente identità root all'avvio quando le credenziali sono disponibili. | |
77
- | Crea utente di autenticazione ChillSharp collegato | | Crea inoltre l'oggetto ChillSharp `AuthUser` collegato con accesso alla gestione delle autorizzazioni. | |
78
- | Nome utente root | | Nome di accesso per l'amministratore bootstrap. | non impostato |
79
- | Password di root | | Password per l'amministratore del bootstrap. | non impostato |
80
- | E-mail di root | | E-mail facoltativa per l'amministratore bootstrap. | non impostato |
81
- | Nome visualizzato radice | | Nome visualizzato copiato nel ChillSharp `AuthUser` collegato. | `Root` nel codice |
82
-
83
- ## Note
84
-
85
- - La maggior parte delle variabili elencate qui utilizzano il prefisso `CHILLSHARP_*` dell'host di esempio. `CHILLSHARP_SYSTEM_TIMEZONE` è una variabile di runtime ChillSharp principale utilizzata direttamente dalla mappatura data/ora DTO.
86
- - L'output della console di avvio include entrambe le variabili `CHILLSHARP_*` e `CHILL_SHARP_*`. I valori `PASSWORD` vengono mascherati, ma gli altri valori vengono stampati così come sono.
87
- - `CHILLSHARP_AUTH_ACCESS_TOKEN_MINUTES` e `CHILLSHARP_AUTH_REFRESH_TOKEN_DAYS` sono impostazioni predefinite di autenticazione ChillSharp integrate. Sono accettati valori interi positivi; i valori non validi, zero o negativi rientrano nei valori predefiniti del codice.
88
- - `CHILLSHARP_ATTACHMENT_ARCHIVE_ROOT` viene letto direttamente da `ChillSharp.Attachment` e dovrebbe puntare a un volume persistente in Docker.
89
- - `CHILLSHARP_SYSTEM_TIMEZONE` prevede un ID fuso orario IANA come `Europe/Rome` o `America/New_York`.
90
- - `CHILLSHARP_SYSTEM_TIMEZONE` influisce su `DateTime` e alcuni percorsi di normalizzazione `DateTimeOffset`. `DateOnly` e `TimeOnly` mantengono l'output di stringa .NET standard.
91
- - Le variabili `CHILLSHARP_*` elencate qui vengono utilizzate da ChillSharp stesso o dal codice di avvio dell'host di esempio.
92
- - Se crei la tua applicazione host, puoi mantenere questi nomi o la configurazione della mappa in modo diverso nel tuo codice di avvio.
93
- - Per esempi di distribuzione, vedere anche [doc/HowTo/05-docker-env-variables.md](../HowTo/05-docker-env-variables.md).
94
- - Per riferimenti ed esempi completi sulla serializzazione di data/ora, vedere [doc/DateTimeSerialization.md](../DateTimeSerialization.md).
@@ -1,114 +0,0 @@
1
- # Preferenze Dell'Utente Corrente
2
-
3
- English version: [English](../CurrentUserPreferences.md)
4
-
5
- `ChillSharp.Auth` puo rendere disponibili agli hook del ciclo di vita delle entita le preferenze di visualizzazione dell'utente autenticato senza interrogare `AuthUser` a ogni salvataggio.
6
-
7
- Lo snapshot immutabile `ChillUserPreferences` contiene:
8
-
9
- - `DisplayCultureName`
10
- - `DisplayTimeZone`
11
- - `DisplayDateFormat`
12
- - `DisplayNumberFormat`
13
- - `PreferredTheme`
14
-
15
- ## Registrazione E Ciclo Di Vita Della Cache
16
-
17
- `AddChillAuthApi<TContext>()` registra il singleton `IChillAuthUserPreferencesCache` e lo scoped `IChillAuthUserPreferencesAccessor`.
18
-
19
- Quando l'utente esegue il login o rinnova un token, ChillSharp carica una volta l'`AuthUser` corrispondente e inizializza uno snapshot associato al suo `ExternalId`. L'accessor legge solo quello snapshot in memoria durante le richieste; non interroga la tabella utenti.
20
-
21
- `ChillAuthService` aggiorna lo snapshot in cache dopo la creazione o l'aggiornamento di un `AuthUser`. Invalida lo snapshot di un utente eliminato ed entrambe le chiavi, precedente e nuova, quando cambia `ExternalId`.
22
-
23
- La cache memorizza valori scalari delle preferenze, mai un'istanza EF Core tracciata di `AuthUser`.
24
-
25
- ## API delle preferenze dell'utente corrente
26
-
27
- I client autenticati possono recuperare lo stesso snapshot utilizzato dal codice server con:
28
-
29
- ```http
30
- GET /api/chill-auth/current-user-preferences
31
- Authorization: Bearer <access token>
32
- ```
33
-
34
- La risposta e un oggetto JSON `ChillUserPreferences`:
35
-
36
- ```json
37
- {
38
- "displayCultureName": "it-IT",
39
- "displayTimeZone": "Europe/Rome",
40
- "displayDateFormat": "dd/MM/yyyy",
41
- "displayNumberFormat": "N2",
42
- "preferredTheme": "cini"
43
- }
44
- ```
45
-
46
- Usa questo endpoint dopo il login e durante il ripristino di una sessione UI autenticata. E la fonte autorevole per lingua/cultura, fuso orario, formato data e formato numerico usati dal client API e dalla UI; non ricavare tali valori dal browser, dal sistema operativo, dalle claim del token o da un endpoint di gestione dell'autenticazione.
47
-
48
- Il client C# espone `GetCurrentUserPreferences()`. Il client Python espone `get_current_user_preferences()`, mentre il client TypeScript e il wrapper Angular espongono `getCurrentUserPreferences()`. I pacchetti Vue e React forniscono inoltre `useCurrentUserPreferences()`.
49
-
50
- Nel pacchetto Angular UI Core, inietta `ChillService` e usa il signal `userPreferences` oppure le singole proiezioni `displayCultureName`, `displayTimeZone`, `displayDateFormat`, `displayNumberFormat` e `preferredTheme`. Usali per la cultura dei testi UI, le operazioni di formato/analisi di date e numeri, la conversione degli orari UTC in locali e il tema selezionato.
51
-
52
- `PreferredTheme` e una stringa opaca: il backend la salva e la restituisce senza conoscere i temi forniti dal client. UI Core usa la scelta del browser `prefers-color-scheme` (`bright` o `dark`) quando non esiste una preferenza autenticata. Le applicazioni client possono dichiarare temi aggiuntivi selezionabili durante la registrazione di UI Core:
53
-
54
- ```ts
55
- provideChillSharpUiCore({ additionalThemes: ['cini'] })
56
- ```
57
-
58
- Le scelte integrate sono `bright`, `dark` e `soft`. Se il valore salvato di un utente autenticato non e disponibile nel client, UI Core torna alla preferenza chiara/scura del browser.
59
-
60
- ## DbContext Host
61
-
62
- Per impostazione predefinita `IChillContext.GetCurrentUserPreferences()` restituisce `ChillUserPreferences.Empty`. In un contesto host personalizzato con auth abilitata, inietta `IChillAuthUserPreferencesAccessor` e delega a esso:
63
-
64
- ```csharp
65
- using ChillSharp;
66
- using ChillSharp.Auth.Services;
67
-
68
- public class AppDbContext : DbContext, IChillContext, IChillAuthDbContext
69
- {
70
- private readonly IChillAuthUserPreferencesAccessor? _userPreferencesAccessor;
71
-
72
- public AppDbContext(
73
- DbContextOptions<AppDbContext> options,
74
- IChillAuthUserPreferencesAccessor? userPreferencesAccessor = null)
75
- : base(options)
76
- {
77
- _userPreferencesAccessor = userPreferencesAccessor;
78
- }
79
-
80
- public ChillUserPreferences GetCurrentUserPreferences() =>
81
- _userPreferencesAccessor?.Current ?? ChillUserPreferences.Empty;
82
-
83
- public string GetDefaultUserCultureName()
84
- {
85
- var cultureName = GetCurrentUserPreferences().DisplayCultureName;
86
- return string.IsNullOrWhiteSpace(cultureName)
87
- ? GetPrimaryCultureName()
88
- : cultureName;
89
- }
90
- }
91
- ```
92
-
93
- Il parametro opzionale del costruttore mantiene compatibile la creazione a design-time e i test che costruiscono direttamente il contesto. Un contesto creato normalmente dalla dependency injection riceve l'accessor.
94
-
95
- `ChillAuthDbContext` implementa gia questo schema.
96
-
97
- ## Hook Del Ciclo Di Vita Delle Entita
98
-
99
- Usa lo snapshot direttamente dall'`IChillContext` fornito. Nell'hook non e necessario alcun accesso al database.
100
-
101
- ```csharp
102
- public override void OnUpdate(IChillContext context)
103
- {
104
- var preferences = context.GetCurrentUserPreferences();
105
- var timeZone = preferences.DisplayTimeZone;
106
-
107
- if (!string.IsNullOrWhiteSpace(timeZone))
108
- {
109
- // Applica il comportamento relativo al fuso orario dell'applicazione.
110
- }
111
- }
112
- ```
113
-
114
- Tutti i valori possono essere vuoti per job in background, chiamate non autenticate o un utente senza un `AuthUser` corrispondente. Considerali opzionali e scegli un fallback dell'applicazione. Valida `DisplayTimeZone` prima di usarlo come identificatore di fuso orario.
@@ -1,154 +0,0 @@
1
- # Politica DateTime di ChillSharp
2
-
3
- Versione originale in inglese: [English](../../DateTimePolicy/README.md)
4
-
5
-
6
- Questo documento definisce la policy DTO di ChillSharp per i valori `DateTime` e `DateTimeOffset`.
7
-
8
- La policy si applica quando ChillSharp legge o scrive valori tramite contenitori di proprietà DTO, come `ChillDtoEntity.Properties` e `ChillDtoQuery.Properties`.
9
-
10
- ## Fuso orario del sistema
11
-
12
- ChillSharp utilizza un fuso orario di sistema configurato quando un valore DTO non presenta un offset esplicito.
13
-
14
- Variabile d'ambiente:
15
-
16
- ```text
17
- CHILLSHARP_SYSTEM_TIMEZONE
18
- ```
19
-
20
- Predefinito:
21
-
22
- ```text
23
- Europe/Rome
24
- ```
25
-
26
- Utilizza un ID fuso orario IANA, ad esempio:
27
-
28
- ```text
29
- Europe/Rome
30
- America/New_York
31
- UTC
32
- ```
33
-
34
- Questo fuso orario configurato non è la stessa cosa di `DateTimeKind.Local`. `DateTimeKind.Local` indica il fuso orario locale del sistema operativo. ChillSharp utilizza esplicitamente il proprio fuso orario configurato.
35
-
36
- ## Valori DTO in entrata
37
-
38
- I valori in ingresso sono valori ricevuti da un client e applicati alle proprietà CLR.
39
-
40
- ### DateTimeOffset
41
-
42
- `DateTimeOffset` conserva un offset esplicito quando il client ne invia uno.
43
-
44
- Esempi:
45
-
46
- ```text
47
- 2026-04-11T14:30:00.0000000+02:00
48
- 2026-04-11T12:30:00.0000000Z
49
- ```
50
-
51
- Politica:
52
-
53
- - se il valore in ingresso ha `Z`, conservalo come UTC `DateTimeOffset`
54
- - se il valore in entrata ha un offset esplicito, preserva tale offset
55
- - se il valore in ingresso non ha offset, interpretarlo come ora locale in `CHILLSHARP_SYSTEM_TIMEZONE`
56
- - memorizzare il valore risultante come `DateTimeOffset` con l'offset risolto
57
-
58
- Esempio con `CHILLSHARP_SYSTEM_TIMEZONE=Europe/Rome`:
59
-
60
- ```text
61
- Incoming: 2026-04-11T14:30:00
62
- Stored: 2026-04-11T14:30:00+02:00
63
- ```
64
-
65
- ### Data e ora
66
-
67
- `DateTime` rappresenta un istante ed è normalizzato in UTC quando letto dall'ingresso DTO.
68
-
69
- Politica:
70
-
71
- - se il valore in ingresso ha `Z`, analizzalo come UTC
72
- - se il valore in entrata ha un offset esplicito, analizzalo come quell'istante
73
- - se il valore in ingresso non ha offset, interpretarlo come ora locale in `CHILLSHARP_SYSTEM_TIMEZONE`
74
- - memorizzare il valore risultante come UTC `DateTime`
75
- - imposta `DateTime.Kind` su `DateTimeKind.Utc`
76
-
77
- Esempio con `CHILLSHARP_SYSTEM_TIMEZONE=Europe/Rome`:
78
-
79
- ```text
80
- Incoming: 2026-04-11T14:30:00
81
- Stored: 2026-04-11T12:30:00Z
82
- Kind: Utc
83
- ```
84
-
85
- Esempio con un offset esplicito:
86
-
87
- ```text
88
- Incoming: 2026-04-11T14:30:00+02:00
89
- Stored: 2026-04-11T12:30:00Z
90
- Kind: Utc
91
- ```
92
-
93
- ## Valori DTO in uscita
94
-
95
- I valori in uscita sono valori CLR serializzati nei contenitori delle proprietà DTO prima di restituire i dati a un client.
96
-
97
- ### DateTimeOffset
98
-
99
- ChillSharp serializza `DateTimeOffset` come stringa ISO 8601 con il relativo offset.
100
-
101
- ```text
102
- 2026-04-11T14:30:00.0000000+02:00
103
- ```
104
-
105
- ### Data e ora
106
-
107
- ChillSharp serializza `DateTime` come stringa ISO 8601 con un offset esplicito.
108
-
109
- Politica:
110
-
111
- - se il valore di origine è UTC, convertirlo in `CHILLSHARP_SYSTEM_TIMEZONE` per l'output DTO
112
- - se il valore di origine non è specificato, interpretarlo come ora locale in `CHILLSHARP_SYSTEM_TIMEZONE`
113
- - emettere una stringa ISO 8601 con l'offset risolto
114
-
115
- Esempio con `CHILLSHARP_SYSTEM_TIMEZONE=Europe/Rome`:
116
-
117
- ```text
118
- CLR: 2026-04-11T12:30:00Z
119
- DTO: 2026-04-11T14:30:00.0000000+02:00
120
- ```
121
-
122
- A seconda del serializzatore JSON, il carattere `+` potrebbe apparire come `\u002B` sul cavo:
123
-
124
- ```json
125
- "2026-04-11T14:30:00.0000000\u002B02:00"
126
- ```
127
-
128
- Questo è un JSON valido e i client lo rileggono come `+02:00`.
129
-
130
- ## Guida al database
131
-
132
- Questa policy è progettata per funzionare in modo pulito con provider come PostgreSQL/Npgsql.
133
-
134
- Mappatura consigliata:
135
-
136
- - utilizzare `DateTime` per valori istantanei che devono essere mantenuti come UTC
137
- - utilizzare `DateTimeOffset` quando si preservano le questioni di offset in entrata
138
- - utilizzare `DateOnly` e `TimeOnly` per date di calendario o ore del giorno che non siano istantanee
139
-
140
- Per PostgreSQL:
141
-
142
- - I valori `DateTime` prodotti dall'analisi DTO sono UTC e sono adatti per `timestamp with time zone`
143
- - i valori dell'orologio locale non devono essere modellati come `DateTime` a meno che non si intenda convertirli in UTC
144
-
145
- ## Campi di controllo gestiti dal server
146
-
147
- I campi di controllo gestiti dal server ChillSharp vengono ignorati quando si applicano i valori DTO dell'entità in entrata:
148
-
149
- -
150
- -
151
- -
152
- -
153
-
154
- I client possono ricevere questi valori dall'output DTO, ma il loro invio non sovrascrive lo stato dell'entità gestita dal server.