@chill-sharp/ui-core 1.1.12
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.
- package/.agents/skills/chillsharp-current-user-preferences/SKILL.md +70 -0
- package/.agents/skills/chillsharp-ui-template/SKILL.md +18 -0
- package/README.md +103 -0
- package/chill-sharp-ui-core.d.ts.map +1 -0
- package/doc/AIAssistedDevelopment/README.md +185 -0
- package/doc/AttachmentModel/README.md +173 -0
- package/doc/AuthenticationModel/README.md +213 -0
- package/doc/AuthenticationModel/how-to-integreate-auth-minimal-api.md +293 -0
- package/doc/ChillSharpClient.md +464 -0
- package/doc/ClientGeneration/README.md +172 -0
- package/doc/ComplianceGuide/README.md +178 -0
- package/doc/Configuration/README.md +94 -0
- package/doc/CurrentUserPreferences.md +114 -0
- package/doc/DateTimePolicy/README.md +154 -0
- package/doc/DateTimeSerialization.md +423 -0
- package/doc/Endpoints.md +260 -0
- package/doc/HowTo/01-simple-blog-sqlite.md +153 -0
- package/doc/HowTo/02-blog-schema-labels.md +140 -0
- package/doc/HowTo/03-authentication.md +218 -0
- package/doc/HowTo/04-blog-posts-one-to-many.md +194 -0
- package/doc/HowTo/05-docker-env-variables.md +274 -0
- package/doc/HowTo/06-chunk-transactions-autocomplete.md +196 -0
- package/doc/Mcp/ChatGPT.md +291 -0
- package/doc/Mcp/README.md +799 -0
- package/doc/MenuGuide/README.md +49 -0
- package/doc/ModelPreparation.md +255 -0
- package/doc/PermissionModel/README.md +277 -0
- package/doc/README.md +228 -0
- package/doc/ReferenceExistence.md +130 -0
- package/doc/RegisterContext.md +217 -0
- package/doc/UiCore/CRUD.md +170 -0
- package/doc/UiCore/README.md +13 -0
- package/doc/ValidationModel/README.md +117 -0
- package/doc/it/AIAssistedDevelopment/README.md +185 -0
- package/doc/it/AttachmentModel/README.md +173 -0
- package/doc/it/AuthenticationModel/README.md +171 -0
- package/doc/it/AuthenticationModel/how-to-integreate-auth-minimal-api.md +292 -0
- package/doc/it/ChillSharpClient.md +464 -0
- package/doc/it/ClientGeneration/README.md +152 -0
- package/doc/it/ComplianceGuide/README.md +178 -0
- package/doc/it/Configuration/README.md +94 -0
- package/doc/it/CurrentUserPreferences.md +114 -0
- package/doc/it/DateTimePolicy/README.md +154 -0
- package/doc/it/DateTimeSerialization.md +423 -0
- package/doc/it/Endpoints.md +260 -0
- package/doc/it/HowTo/01-simple-blog-sqlite.md +152 -0
- package/doc/it/HowTo/02-blog-schema-labels.md +139 -0
- package/doc/it/HowTo/03-authentication.md +221 -0
- package/doc/it/HowTo/04-blog-posts-one-to-many.md +193 -0
- package/doc/it/HowTo/05-docker-env-variables.md +268 -0
- package/doc/it/HowTo/06-chunk-transactions-autocomplete.md +196 -0
- package/doc/it/Mcp/ChatGPT.md +291 -0
- package/doc/it/Mcp/README.md +799 -0
- package/doc/it/MenuGuide/README.md +49 -0
- package/doc/it/ModelPreparation.md +254 -0
- package/doc/it/PermissionModel/README.md +190 -0
- package/doc/it/README.md +172 -0
- package/doc/it/ReferenceExistence.md +130 -0
- package/doc/it/RegisterContext.md +218 -0
- package/doc/it/UiCore/CRUD.md +170 -0
- package/doc/it/UiCore/README.md +13 -0
- package/doc/it/ValidationModel/README.md +117 -0
- package/fesm2022/chill-sharp-ui-core.mjs +16725 -0
- package/fesm2022/chill-sharp-ui-core.mjs.map +1 -0
- package/index.d.ts +6 -0
- package/lib/chill-sharp-ui-root.component.d.ts +6 -0
- package/lib/chill-sharp-ui-root.component.d.ts.map +1 -0
- package/lib/chill-sharp-ui.routes.d.ts +3 -0
- package/lib/chill-sharp-ui.routes.d.ts.map +1 -0
- package/lib/chill.config.d.ts +5 -0
- package/lib/chill.config.d.ts.map +1 -0
- package/lib/layouts/auth-shell.component.d.ts +8 -0
- package/lib/layouts/auth-shell.component.d.ts.map +1 -0
- package/lib/layouts/workspace-page.component.d.ts +49 -0
- package/lib/layouts/workspace-page.component.d.ts.map +1 -0
- package/lib/lib/chill-form.component.d.ts +151 -0
- package/lib/lib/chill-form.component.d.ts.map +1 -0
- package/lib/lib/chill-i18n-button-label.component.d.ts +27 -0
- package/lib/lib/chill-i18n-button-label.component.d.ts.map +1 -0
- package/lib/lib/chill-i18n-label.component.d.ts +30 -0
- package/lib/lib/chill-i18n-label.component.d.ts.map +1 -0
- package/lib/lib/chill-json-input.component.d.ts +31 -0
- package/lib/lib/chill-json-input.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-boolean-control.component.d.ts +12 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-boolean-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-editor-control.component.d.ts +17 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-editor-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-lookup-control.component.d.ts +45 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-lookup-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-scalar-control.component.d.ts +19 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-scalar-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-select-control.component.d.ts +12 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-select-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-textarea-control.component.d.ts +13 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-textarea-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-input.component.d.ts +452 -0
- package/lib/lib/chill-polymorphic-input.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-boolean-control.component.d.ts +7 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-boolean-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-lookup-control.component.d.ts +7 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-lookup-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-number-control.component.d.ts +7 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-number-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-temporal-control.component.d.ts +8 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-temporal-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-value-control.component.d.ts +7 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-value-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-output.component.d.ts +75 -0
- package/lib/lib/chill-polymorphic-output.component.d.ts.map +1 -0
- package/lib/lib/chill-table.component.d.ts +434 -0
- package/lib/lib/chill-table.component.d.ts.map +1 -0
- package/lib/lib/chill-text-editor-dialog.component.d.ts +14 -0
- package/lib/lib/chill-text-editor-dialog.component.d.ts.map +1 -0
- package/lib/lib/crud-configuration.utils.d.ts +4 -0
- package/lib/lib/crud-configuration.utils.d.ts.map +1 -0
- package/lib/lib/culture-name-options.d.ts +3 -0
- package/lib/lib/culture-name-options.d.ts.map +1 -0
- package/lib/lib/date-format-options.d.ts +3 -0
- package/lib/lib/date-format-options.d.ts.map +1 -0
- package/lib/lib/iana-time-zone-options.d.ts +3 -0
- package/lib/lib/iana-time-zone-options.d.ts.map +1 -0
- package/lib/lib/notice-transition.directive.d.ts +17 -0
- package/lib/lib/notice-transition.directive.d.ts.map +1 -0
- package/lib/lib/schema-property-dialog.component.d.ts +74 -0
- package/lib/lib/schema-property-dialog.component.d.ts.map +1 -0
- package/lib/models/chill-auth.models.d.ts +176 -0
- package/lib/models/chill-auth.models.d.ts.map +1 -0
- package/lib/models/chill-menu.models.d.ts +12 -0
- package/lib/models/chill-menu.models.d.ts.map +1 -0
- package/lib/models/chill-schema.models.d.ts +141 -0
- package/lib/models/chill-schema.models.d.ts.map +1 -0
- package/lib/models/workspace-dialog.models.d.ts +16 -0
- package/lib/models/workspace-dialog.models.d.ts.map +1 -0
- package/lib/models/workspace-task.models.d.ts +36 -0
- package/lib/models/workspace-task.models.d.ts.map +1 -0
- package/lib/pages/confirm-reset-page.component.d.ts +21 -0
- package/lib/pages/confirm-reset-page.component.d.ts.map +1 -0
- package/lib/pages/crud/attachment-upload-dialog.component.d.ts +24 -0
- package/lib/pages/crud/attachment-upload-dialog.component.d.ts.map +1 -0
- package/lib/pages/crud/crud-page.component.d.ts +244 -0
- package/lib/pages/crud/crud-page.component.d.ts.map +1 -0
- package/lib/pages/login-page.component.d.ts +21 -0
- package/lib/pages/login-page.component.d.ts.map +1 -0
- package/lib/pages/permissions/auth-role-dialog.component.d.ts +29 -0
- package/lib/pages/permissions/auth-role-dialog.component.d.ts.map +1 -0
- package/lib/pages/permissions/auth-search-select.component.d.ts +28 -0
- package/lib/pages/permissions/auth-search-select.component.d.ts.map +1 -0
- package/lib/pages/permissions/auth-user-dialog.component.d.ts +35 -0
- package/lib/pages/permissions/auth-user-dialog.component.d.ts.map +1 -0
- package/lib/pages/permissions/permission-editor.component.d.ts +55 -0
- package/lib/pages/permissions/permission-editor.component.d.ts.map +1 -0
- package/lib/pages/permissions/permissions-page.component.d.ts +38 -0
- package/lib/pages/permissions/permissions-page.component.d.ts.map +1 -0
- package/lib/pages/permissions/role-permission.component.d.ts +43 -0
- package/lib/pages/permissions/role-permission.component.d.ts.map +1 -0
- package/lib/pages/permissions/user-permission.component.d.ts +43 -0
- package/lib/pages/permissions/user-permission.component.d.ts.map +1 -0
- package/lib/pages/register-page.component.d.ts +24 -0
- package/lib/pages/register-page.component.d.ts.map +1 -0
- package/lib/pages/reset-password-page.component.d.ts +18 -0
- package/lib/pages/reset-password-page.component.d.ts.map +1 -0
- package/lib/provide-chill-sharp-ui-core.d.ts +8 -0
- package/lib/provide-chill-sharp-ui-core.d.ts.map +1 -0
- package/lib/services/chill.service.d.ts +249 -0
- package/lib/services/chill.service.d.ts.map +1 -0
- package/lib/services/workspace-dialog.service.d.ts +22 -0
- package/lib/services/workspace-dialog.service.d.ts.map +1 -0
- package/lib/services/workspace-layout.service.d.ts +13 -0
- package/lib/services/workspace-layout.service.d.ts.map +1 -0
- package/lib/services/workspace-task-registry.service.d.ts +35 -0
- package/lib/services/workspace-task-registry.service.d.ts.map +1 -0
- package/lib/services/workspace-toolbar.service.d.ts +23 -0
- package/lib/services/workspace-toolbar.service.d.ts.map +1 -0
- package/lib/services/workspace.service.d.ts +114 -0
- package/lib/services/workspace.service.d.ts.map +1 -0
- package/lib/storage-keys.d.ts +5 -0
- package/lib/storage-keys.d.ts.map +1 -0
- package/lib/tasks/crud-task/crud-task.component.d.ts +33 -0
- package/lib/tasks/crud-task/crud-task.component.d.ts.map +1 -0
- package/lib/tasks/goto-url-task/goto-url-task.component.d.ts +31 -0
- package/lib/tasks/goto-url-task/goto-url-task.component.d.ts.map +1 -0
- package/lib/workspace/confirm-message-dialog.component.d.ts +16 -0
- package/lib/workspace/confirm-message-dialog.component.d.ts.map +1 -0
- package/lib/workspace/entity-options-dialog.component.d.ts +29 -0
- package/lib/workspace/entity-options-dialog.component.d.ts.map +1 -0
- package/lib/workspace/external-task-api.d.ts +2 -0
- package/lib/workspace/external-task-api.d.ts.map +1 -0
- package/lib/workspace/user-profile-dialog.component.d.ts +30 -0
- package/lib/workspace/user-profile-dialog.component.d.ts.map +1 -0
- package/lib/workspace/workspace-dialog-host.component.d.ts +26 -0
- package/lib/workspace/workspace-dialog-host.component.d.ts.map +1 -0
- package/lib/workspace/workspace-menu-item-dialog.component.d.ts +61 -0
- package/lib/workspace/workspace-menu-item-dialog.component.d.ts.map +1 -0
- package/lib/workspace/workspace-menu.component.d.ts +104 -0
- package/lib/workspace/workspace-menu.component.d.ts.map +1 -0
- package/lib/workspace/workspace-taskbar.component.d.ts +14 -0
- package/lib/workspace/workspace-taskbar.component.d.ts.map +1 -0
- package/package.json +54 -0
- package/public-api.d.ts +56 -0
- package/public-api.d.ts.map +1 -0
- package/service-worker/chill-sharp-service-worker.js +166 -0
- package/styles/core-theme.scss +1268 -0
- package/template-customization/upgrade.ps1.template +342 -0
- package/template-customization/upgrade.sh.template +271 -0
|
@@ -0,0 +1,178 @@
|
|
|
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)
|
|
@@ -0,0 +1,94 @@
|
|
|
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).
|
|
@@ -0,0 +1,114 @@
|
|
|
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.
|
|
@@ -0,0 +1,154 @@
|
|
|
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.
|