@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.
Files changed (204) hide show
  1. package/.agents/skills/chillsharp-current-user-preferences/SKILL.md +70 -0
  2. package/.agents/skills/chillsharp-ui-template/SKILL.md +18 -0
  3. package/README.md +103 -0
  4. package/chill-sharp-ui-core.d.ts.map +1 -0
  5. package/doc/AIAssistedDevelopment/README.md +185 -0
  6. package/doc/AttachmentModel/README.md +173 -0
  7. package/doc/AuthenticationModel/README.md +213 -0
  8. package/doc/AuthenticationModel/how-to-integreate-auth-minimal-api.md +293 -0
  9. package/doc/ChillSharpClient.md +464 -0
  10. package/doc/ClientGeneration/README.md +172 -0
  11. package/doc/ComplianceGuide/README.md +178 -0
  12. package/doc/Configuration/README.md +94 -0
  13. package/doc/CurrentUserPreferences.md +114 -0
  14. package/doc/DateTimePolicy/README.md +154 -0
  15. package/doc/DateTimeSerialization.md +423 -0
  16. package/doc/Endpoints.md +260 -0
  17. package/doc/HowTo/01-simple-blog-sqlite.md +153 -0
  18. package/doc/HowTo/02-blog-schema-labels.md +140 -0
  19. package/doc/HowTo/03-authentication.md +218 -0
  20. package/doc/HowTo/04-blog-posts-one-to-many.md +194 -0
  21. package/doc/HowTo/05-docker-env-variables.md +274 -0
  22. package/doc/HowTo/06-chunk-transactions-autocomplete.md +196 -0
  23. package/doc/Mcp/ChatGPT.md +291 -0
  24. package/doc/Mcp/README.md +799 -0
  25. package/doc/MenuGuide/README.md +49 -0
  26. package/doc/ModelPreparation.md +255 -0
  27. package/doc/PermissionModel/README.md +277 -0
  28. package/doc/README.md +228 -0
  29. package/doc/ReferenceExistence.md +130 -0
  30. package/doc/RegisterContext.md +217 -0
  31. package/doc/UiCore/CRUD.md +170 -0
  32. package/doc/UiCore/README.md +13 -0
  33. package/doc/ValidationModel/README.md +117 -0
  34. package/doc/it/AIAssistedDevelopment/README.md +185 -0
  35. package/doc/it/AttachmentModel/README.md +173 -0
  36. package/doc/it/AuthenticationModel/README.md +171 -0
  37. package/doc/it/AuthenticationModel/how-to-integreate-auth-minimal-api.md +292 -0
  38. package/doc/it/ChillSharpClient.md +464 -0
  39. package/doc/it/ClientGeneration/README.md +152 -0
  40. package/doc/it/ComplianceGuide/README.md +178 -0
  41. package/doc/it/Configuration/README.md +94 -0
  42. package/doc/it/CurrentUserPreferences.md +114 -0
  43. package/doc/it/DateTimePolicy/README.md +154 -0
  44. package/doc/it/DateTimeSerialization.md +423 -0
  45. package/doc/it/Endpoints.md +260 -0
  46. package/doc/it/HowTo/01-simple-blog-sqlite.md +152 -0
  47. package/doc/it/HowTo/02-blog-schema-labels.md +139 -0
  48. package/doc/it/HowTo/03-authentication.md +221 -0
  49. package/doc/it/HowTo/04-blog-posts-one-to-many.md +193 -0
  50. package/doc/it/HowTo/05-docker-env-variables.md +268 -0
  51. package/doc/it/HowTo/06-chunk-transactions-autocomplete.md +196 -0
  52. package/doc/it/Mcp/ChatGPT.md +291 -0
  53. package/doc/it/Mcp/README.md +799 -0
  54. package/doc/it/MenuGuide/README.md +49 -0
  55. package/doc/it/ModelPreparation.md +254 -0
  56. package/doc/it/PermissionModel/README.md +190 -0
  57. package/doc/it/README.md +172 -0
  58. package/doc/it/ReferenceExistence.md +130 -0
  59. package/doc/it/RegisterContext.md +218 -0
  60. package/doc/it/UiCore/CRUD.md +170 -0
  61. package/doc/it/UiCore/README.md +13 -0
  62. package/doc/it/ValidationModel/README.md +117 -0
  63. package/fesm2022/chill-sharp-ui-core.mjs +16725 -0
  64. package/fesm2022/chill-sharp-ui-core.mjs.map +1 -0
  65. package/index.d.ts +6 -0
  66. package/lib/chill-sharp-ui-root.component.d.ts +6 -0
  67. package/lib/chill-sharp-ui-root.component.d.ts.map +1 -0
  68. package/lib/chill-sharp-ui.routes.d.ts +3 -0
  69. package/lib/chill-sharp-ui.routes.d.ts.map +1 -0
  70. package/lib/chill.config.d.ts +5 -0
  71. package/lib/chill.config.d.ts.map +1 -0
  72. package/lib/layouts/auth-shell.component.d.ts +8 -0
  73. package/lib/layouts/auth-shell.component.d.ts.map +1 -0
  74. package/lib/layouts/workspace-page.component.d.ts +49 -0
  75. package/lib/layouts/workspace-page.component.d.ts.map +1 -0
  76. package/lib/lib/chill-form.component.d.ts +151 -0
  77. package/lib/lib/chill-form.component.d.ts.map +1 -0
  78. package/lib/lib/chill-i18n-button-label.component.d.ts +27 -0
  79. package/lib/lib/chill-i18n-button-label.component.d.ts.map +1 -0
  80. package/lib/lib/chill-i18n-label.component.d.ts +30 -0
  81. package/lib/lib/chill-i18n-label.component.d.ts.map +1 -0
  82. package/lib/lib/chill-json-input.component.d.ts +31 -0
  83. package/lib/lib/chill-json-input.component.d.ts.map +1 -0
  84. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-boolean-control.component.d.ts +12 -0
  85. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-boolean-control.component.d.ts.map +1 -0
  86. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-editor-control.component.d.ts +17 -0
  87. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-editor-control.component.d.ts.map +1 -0
  88. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-lookup-control.component.d.ts +45 -0
  89. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-lookup-control.component.d.ts.map +1 -0
  90. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-scalar-control.component.d.ts +19 -0
  91. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-scalar-control.component.d.ts.map +1 -0
  92. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-select-control.component.d.ts +12 -0
  93. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-select-control.component.d.ts.map +1 -0
  94. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-textarea-control.component.d.ts +13 -0
  95. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-textarea-control.component.d.ts.map +1 -0
  96. package/lib/lib/chill-polymorphic-input.component.d.ts +452 -0
  97. package/lib/lib/chill-polymorphic-input.component.d.ts.map +1 -0
  98. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-boolean-control.component.d.ts +7 -0
  99. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-boolean-control.component.d.ts.map +1 -0
  100. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-lookup-control.component.d.ts +7 -0
  101. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-lookup-control.component.d.ts.map +1 -0
  102. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-number-control.component.d.ts +7 -0
  103. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-number-control.component.d.ts.map +1 -0
  104. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-temporal-control.component.d.ts +8 -0
  105. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-temporal-control.component.d.ts.map +1 -0
  106. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-value-control.component.d.ts +7 -0
  107. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-value-control.component.d.ts.map +1 -0
  108. package/lib/lib/chill-polymorphic-output.component.d.ts +75 -0
  109. package/lib/lib/chill-polymorphic-output.component.d.ts.map +1 -0
  110. package/lib/lib/chill-table.component.d.ts +434 -0
  111. package/lib/lib/chill-table.component.d.ts.map +1 -0
  112. package/lib/lib/chill-text-editor-dialog.component.d.ts +14 -0
  113. package/lib/lib/chill-text-editor-dialog.component.d.ts.map +1 -0
  114. package/lib/lib/crud-configuration.utils.d.ts +4 -0
  115. package/lib/lib/crud-configuration.utils.d.ts.map +1 -0
  116. package/lib/lib/culture-name-options.d.ts +3 -0
  117. package/lib/lib/culture-name-options.d.ts.map +1 -0
  118. package/lib/lib/date-format-options.d.ts +3 -0
  119. package/lib/lib/date-format-options.d.ts.map +1 -0
  120. package/lib/lib/iana-time-zone-options.d.ts +3 -0
  121. package/lib/lib/iana-time-zone-options.d.ts.map +1 -0
  122. package/lib/lib/notice-transition.directive.d.ts +17 -0
  123. package/lib/lib/notice-transition.directive.d.ts.map +1 -0
  124. package/lib/lib/schema-property-dialog.component.d.ts +74 -0
  125. package/lib/lib/schema-property-dialog.component.d.ts.map +1 -0
  126. package/lib/models/chill-auth.models.d.ts +176 -0
  127. package/lib/models/chill-auth.models.d.ts.map +1 -0
  128. package/lib/models/chill-menu.models.d.ts +12 -0
  129. package/lib/models/chill-menu.models.d.ts.map +1 -0
  130. package/lib/models/chill-schema.models.d.ts +141 -0
  131. package/lib/models/chill-schema.models.d.ts.map +1 -0
  132. package/lib/models/workspace-dialog.models.d.ts +16 -0
  133. package/lib/models/workspace-dialog.models.d.ts.map +1 -0
  134. package/lib/models/workspace-task.models.d.ts +36 -0
  135. package/lib/models/workspace-task.models.d.ts.map +1 -0
  136. package/lib/pages/confirm-reset-page.component.d.ts +21 -0
  137. package/lib/pages/confirm-reset-page.component.d.ts.map +1 -0
  138. package/lib/pages/crud/attachment-upload-dialog.component.d.ts +24 -0
  139. package/lib/pages/crud/attachment-upload-dialog.component.d.ts.map +1 -0
  140. package/lib/pages/crud/crud-page.component.d.ts +244 -0
  141. package/lib/pages/crud/crud-page.component.d.ts.map +1 -0
  142. package/lib/pages/login-page.component.d.ts +21 -0
  143. package/lib/pages/login-page.component.d.ts.map +1 -0
  144. package/lib/pages/permissions/auth-role-dialog.component.d.ts +29 -0
  145. package/lib/pages/permissions/auth-role-dialog.component.d.ts.map +1 -0
  146. package/lib/pages/permissions/auth-search-select.component.d.ts +28 -0
  147. package/lib/pages/permissions/auth-search-select.component.d.ts.map +1 -0
  148. package/lib/pages/permissions/auth-user-dialog.component.d.ts +35 -0
  149. package/lib/pages/permissions/auth-user-dialog.component.d.ts.map +1 -0
  150. package/lib/pages/permissions/permission-editor.component.d.ts +55 -0
  151. package/lib/pages/permissions/permission-editor.component.d.ts.map +1 -0
  152. package/lib/pages/permissions/permissions-page.component.d.ts +38 -0
  153. package/lib/pages/permissions/permissions-page.component.d.ts.map +1 -0
  154. package/lib/pages/permissions/role-permission.component.d.ts +43 -0
  155. package/lib/pages/permissions/role-permission.component.d.ts.map +1 -0
  156. package/lib/pages/permissions/user-permission.component.d.ts +43 -0
  157. package/lib/pages/permissions/user-permission.component.d.ts.map +1 -0
  158. package/lib/pages/register-page.component.d.ts +24 -0
  159. package/lib/pages/register-page.component.d.ts.map +1 -0
  160. package/lib/pages/reset-password-page.component.d.ts +18 -0
  161. package/lib/pages/reset-password-page.component.d.ts.map +1 -0
  162. package/lib/provide-chill-sharp-ui-core.d.ts +8 -0
  163. package/lib/provide-chill-sharp-ui-core.d.ts.map +1 -0
  164. package/lib/services/chill.service.d.ts +249 -0
  165. package/lib/services/chill.service.d.ts.map +1 -0
  166. package/lib/services/workspace-dialog.service.d.ts +22 -0
  167. package/lib/services/workspace-dialog.service.d.ts.map +1 -0
  168. package/lib/services/workspace-layout.service.d.ts +13 -0
  169. package/lib/services/workspace-layout.service.d.ts.map +1 -0
  170. package/lib/services/workspace-task-registry.service.d.ts +35 -0
  171. package/lib/services/workspace-task-registry.service.d.ts.map +1 -0
  172. package/lib/services/workspace-toolbar.service.d.ts +23 -0
  173. package/lib/services/workspace-toolbar.service.d.ts.map +1 -0
  174. package/lib/services/workspace.service.d.ts +114 -0
  175. package/lib/services/workspace.service.d.ts.map +1 -0
  176. package/lib/storage-keys.d.ts +5 -0
  177. package/lib/storage-keys.d.ts.map +1 -0
  178. package/lib/tasks/crud-task/crud-task.component.d.ts +33 -0
  179. package/lib/tasks/crud-task/crud-task.component.d.ts.map +1 -0
  180. package/lib/tasks/goto-url-task/goto-url-task.component.d.ts +31 -0
  181. package/lib/tasks/goto-url-task/goto-url-task.component.d.ts.map +1 -0
  182. package/lib/workspace/confirm-message-dialog.component.d.ts +16 -0
  183. package/lib/workspace/confirm-message-dialog.component.d.ts.map +1 -0
  184. package/lib/workspace/entity-options-dialog.component.d.ts +29 -0
  185. package/lib/workspace/entity-options-dialog.component.d.ts.map +1 -0
  186. package/lib/workspace/external-task-api.d.ts +2 -0
  187. package/lib/workspace/external-task-api.d.ts.map +1 -0
  188. package/lib/workspace/user-profile-dialog.component.d.ts +30 -0
  189. package/lib/workspace/user-profile-dialog.component.d.ts.map +1 -0
  190. package/lib/workspace/workspace-dialog-host.component.d.ts +26 -0
  191. package/lib/workspace/workspace-dialog-host.component.d.ts.map +1 -0
  192. package/lib/workspace/workspace-menu-item-dialog.component.d.ts +61 -0
  193. package/lib/workspace/workspace-menu-item-dialog.component.d.ts.map +1 -0
  194. package/lib/workspace/workspace-menu.component.d.ts +104 -0
  195. package/lib/workspace/workspace-menu.component.d.ts.map +1 -0
  196. package/lib/workspace/workspace-taskbar.component.d.ts +14 -0
  197. package/lib/workspace/workspace-taskbar.component.d.ts.map +1 -0
  198. package/package.json +54 -0
  199. package/public-api.d.ts +56 -0
  200. package/public-api.d.ts.map +1 -0
  201. package/service-worker/chill-sharp-service-worker.js +166 -0
  202. package/styles/core-theme.scss +1268 -0
  203. package/template-customization/upgrade.ps1.template +342 -0
  204. package/template-customization/upgrade.sh.template +271 -0
@@ -0,0 +1,49 @@
1
+ # Guida ai menu di ChillSharp
2
+
3
+ Versione originale in inglese: [English](../../MenuGuide/README.md)
4
+
5
+ ChillSharp può memorizzare un albero dei menu dell'applicazione nel modulo schema invece di codificarlo nel frontend. La gestione dei menu è esposta sotto `/api/chill-schema`.
6
+
7
+ ## Modello di voce di menu
8
+
9
+ Ogni voce dispone di `Guid` stabile, `PositionNo`, `Title`, `Description` facoltativa, `Parent` facoltativo, `ComponentName`, `ComponentConfigurationJson` facoltativo e `MenuHierarchy` facoltativo.
10
+
11
+ - `Parent = null` identifica una voce radice.
12
+ - Le voci figlie fanno riferimento al proprio genitore diretto.
13
+ - Le voci sullo stesso livello sono ordinate per `PositionNo`, poi `Title`, poi `Guid`.
14
+ - `ComponentName` identifica il componente client da aprire, ad esempio `CRUD`.
15
+
16
+ ```json
17
+ {
18
+ "Guid": "00000000-0000-0000-0000-000000000000",
19
+ "PositionNo": 10,
20
+ "Title": "Posts",
21
+ "Description": "Open the post management screen",
22
+ "Parent": null,
23
+ "ComponentName": "CRUD",
24
+ "ComponentConfigurationJson": "{\"ChillType\":\"Model.Post\"}",
25
+ "MenuHierarchy": "CONTENT.POSTS"
26
+ }
27
+ ```
28
+
29
+ ## Endpoint
30
+
31
+ - `GET /api/chill-schema/get-menu` restituisce le voci radice.
32
+ - `GET /api/chill-schema/get-menu?parentGuid={guid}` restituisce i figli diretti di una voce.
33
+ - `POST /api/chill-schema/set-menu` crea una voce quando `Guid` è vuoto oppure aggiorna la voce corrispondente. Un genitore fornito deve già esistere e una voce non può essere il proprio genitore. L'aggiornamento di una voce esistente con `MenuHierarchy` vuoto conserva il valore memorizzato.
34
+ - `DELETE /api/chill-schema/delete-menu?menuItemGuid={guid}` elimina la voce selezionata e l'intero sottoalbero dei suoi discendenti.
35
+
36
+ Carica l'albero un livello alla volta: prima richiedi le radici, poi i figli quando un ramo viene espanso.
37
+
38
+ ## Visibilità con `MenuHierarchy`
39
+
40
+ `MenuHierarchy` accetta un codice oppure codici separati da virgola. ChillSharp unisce i valori separati da virgola dell'utente corrente e di tutti i ruoli attivi in un insieme effettivo di prefissi.
41
+
42
+ - `*` concede l'accesso a ogni voce di menu.
43
+ - Senza alcun prefisso effettivo non viene restituita alcuna voce, comprese quelle con gerarchia vuota.
44
+ - Con almeno un prefisso effettivo sono visibili le voci con gerarchia vuota.
45
+ - Una voce con gerarchia valorizzata è visibile quando inizia con almeno un prefisso effettivo.
46
+
47
+ Per esempio, `CONTENT` concede `CONTENT`, `CONTENT.POSTS` e `CONTENT.REPORTS.MONTHLY`, ma non `ADMIN`. Una voce può esporre più rami con `CONTENT, REPORTS.MONTHLY`.
48
+
49
+ Usa codici stabili separati da punti, quali `ADMIN.USERS`, `CONTENT.POSTS` e `REPORTS.MONTHLY`.
@@ -0,0 +1,254 @@
1
+ # Preparare Un Modello Per ChillSharp
2
+
3
+ Versione originale in inglese: [English](../ModelPreparation.md)
4
+
5
+ Questo documento descrive i requisiti lato modello per esporre un dominio EF Core tramite ChillSharp.
6
+
7
+ ## Obiettivi
8
+
9
+ Dopo la preparazione, il modello puo:
10
+
11
+ - essere attivato dinamicamente tramite Chill type name
12
+ - essere interrogato e modificato tramite Chill DTO
13
+ - esporre metadati di schema ai client
14
+ - partecipare alla manutenzione dei campi di audit
15
+ - usare culture label e informazioni utente specifiche del contesto
16
+
17
+ ## 1. Implementare `IChillContext`
18
+
19
+ Il tuo `DbContext` deve implementare `IChillContext`.
20
+
21
+ Comportamento richiesto:
22
+
23
+ ```csharp
24
+ public class AppDbContext : DbContext, IChillContext
25
+ {
26
+ public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
27
+
28
+ public string GetChillTypePrefix()
29
+ {
30
+ return "MyCompany.MyProduct.Data";
31
+ }
32
+
33
+ public string GetPrimaryCultureName()
34
+ {
35
+ return "en-US";
36
+ }
37
+
38
+ public string GetSecondaryCultureName()
39
+ {
40
+ return "it-IT";
41
+ }
42
+
43
+ public string GetCurrentUserName()
44
+ {
45
+ return Environment.UserName;
46
+ }
47
+ }
48
+ ```
49
+
50
+ ### A cosa serve ogni metodo
51
+
52
+ - `GetChillTypePrefix()`
53
+ Espande nomi brevi come `Model.Blog` in tipi CLR completamente qualificati.
54
+
55
+ - `GetPrimaryCultureName()`
56
+ Definisce quale cultura deve usare `PrimaryLanguageLabel`.
57
+
58
+ - `GetSecondaryCultureName()`
59
+ Definisce quale cultura deve usare `SecondaryLanguageLabel`.
60
+
61
+ - `GetCurrentUserName()`
62
+ Alimenta il tracciamento audit delle entita.
63
+
64
+ Ogni istanza di contesto puo restituire valori diversi. Questo e importante in host multi-tenant o multi-modulo dove possono coesistere piu contesti Chill con impostazioni linguistiche o utente differenti.
65
+
66
+ ## 2. Usare `ChillEntity` Per Le Entita Esposte
67
+
68
+ Il pattern consigliato e ereditare da `ChillSharp.EF.ChillEntity`.
69
+
70
+ ```csharp
71
+ using ChillSharp.Annotations;
72
+ using ChillSharp.EF;
73
+ using System.ComponentModel.DataAnnotations;
74
+
75
+ [ChillEntity(
76
+ UniquePropertyKeyString: "4E16F6C0-6B95-4D67-98BC-9F4D0D63EAF1",
77
+ PrimaryLanguageLabel: "Blog",
78
+ SecondaryLanguageLabel: "Blog")]
79
+ public class Blog : ChillEntity
80
+ {
81
+ [Key]
82
+ public override Guid Guid { get; set; }
83
+
84
+ [ChillProperty(
85
+ UniquePropertyKeyString: "50B1BB6C-D794-41E4-A85C-D4F9D7A6FA7E",
86
+ PrimaryLanguageLabel: "Blog title",
87
+ SecondaryLanguageLabel: "Titolo del blog")]
88
+ public string Title { get; set; } = string.Empty;
89
+
90
+ [ChillProperty(
91
+ UniquePropertyKeyString: "A18E7754-D8F7-45FE-B8A8-EA762A4EC9E6",
92
+ PrimaryLanguageLabel: "Blog url",
93
+ SecondaryLanguageLabel: "Url del blog")]
94
+ public string Url { get; set; } = string.Empty;
95
+
96
+ public override string GetLabel(IChillContext context) => Title;
97
+ }
98
+ ```
99
+
100
+ `ChillEntity` fornisce gia:
101
+
102
+ - `Guid`
103
+ - `Label`
104
+ - `ShortLabel`
105
+ - `FullTextContent`
106
+ - `Checksum`
107
+ - `LastUpdateUser`
108
+ - `LastUpdate`
109
+ - `LastUpdateUtcOffset`
110
+
111
+ ## 3. Annotare Le Proprieta Esposte
112
+
113
+ ChillSharp considera parte della superficie metadata soltanto le proprieta decorate con `[ChillProperty]`.
114
+
115
+ Questo influenza:
116
+
117
+ - mapping DTO
118
+ - generazione schema
119
+ - calcolo checksum
120
+ - metadati label
121
+
122
+ Se una proprieta non e marcata con `[ChillProperty]`, non fa parte della superficie proprieta standard di Chill.
123
+
124
+ ## 4. Capire Gli Hook Del Ciclo Di Vita
125
+
126
+ `ChillEngine` guida i metodi del ciclo di vita delle entita.
127
+
128
+ ### Flusso di creazione
129
+
130
+ Durante la creazione, ChillSharp esegue:
131
+
132
+ 1. `OnCreate(context)`
133
+ 2. `OnUpdate(context)`
134
+ 3. save
135
+ 4. aggiornamento audit interno + `OnAfterUpdate(context)`
136
+ 5. ricalcolo di `Label`, `ShortLabel`, `FullTextContent`
137
+ 6. save
138
+
139
+ ### Flusso di aggiornamento
140
+
141
+ Durante l'update, ChillSharp esegue:
142
+
143
+ 1. `OnUpdate(context)`
144
+ 2. save
145
+ 3. aggiornamento audit interno + `OnAfterUpdate(context)`
146
+ 4. ricalcolo di `Label`, `ShortLabel`, `FullTextContent`
147
+ 5. save
148
+
149
+ ### Flusso di eliminazione
150
+
151
+ Durante il delete, ChillSharp esegue:
152
+
153
+ 1. `OnDelete(context)`
154
+ 2. save delete
155
+ 3. `OnAfterDelete(context)`
156
+ 4. save
157
+
158
+ ## 5. Comportamento Dei Campi Di Audit
159
+
160
+ `ChillEntity` mantiene automaticamente:
161
+
162
+ - `Checksum`
163
+ - `LastUpdateUser`
164
+ - `LastUpdate`
165
+ - `LastUpdateUtcOffset`
166
+
167
+ Il checksum viene calcolato da tutti i valori `[ChillProperty]` tranne i campi di audit stessi.
168
+
169
+ Note:
170
+
171
+ - i valori scalari vengono serializzati usando cultura invariata
172
+ - i riferimenti `IChillEntity` contribuiscono con il loro `Guid`
173
+ - le collezioni vengono appiattite in una sequenza deterministica prima di sommare i byte
174
+
175
+ ### Perche ridefinire `OnAfterUpdate()` e sicuro
176
+
177
+ `ChillEntity` usa un'implementazione esplicita di interfaccia per `IChillEntity.OnAfterUpdate(...)`.
178
+
179
+ `ChillEngine` chiama `OnAfterUpdate()` tramite l'interfaccia, quindi il flusso runtime e:
180
+
181
+ 1. aggiornare i campi di audit
182
+ 2. chiamare l'override derivato di `public virtual OnAfterUpdate(...)`
183
+
184
+ In questo modo le entita derivate hanno una superficie di override pulita, mentre la logica audit di base non puo essere saltata accidentalmente.
185
+
186
+ ## 6. Label E Culture
187
+
188
+ `PrimaryLanguageLabel` e `SecondaryLanguageLabel` non sono solo commenti. Vengono interpretati usando la UI culture attiva e il `IChillContext` attivo.
189
+
190
+ Comportamento corrente:
191
+
192
+ - se la UI culture corrente corrisponde alla cultura secondaria del contesto, ChillSharp preferisce `SecondaryLanguageLabel`
193
+ - se corrisponde alla cultura primaria, ChillSharp preferisce `PrimaryLanguageLabel`
194
+ - altrimenti fa fallback prima su primaria e poi su secondaria
195
+
196
+ Questa logica viene usata quando vengono generati i metadati di schema.
197
+
198
+ ## 7. Query
199
+
200
+ Le query dovrebbero implementare `IChillQuery<IChillEntity>` e possono essere decorate anch'esse con `ChillEntityAttribute` e `ChillPropertyAttribute`.
201
+
202
+ Questo consente di generare lo schema delle query esattamente come quello delle entita.
203
+
204
+ ## 8. Requisiti Per La Persistenza Dello Schema
205
+
206
+ Se vuoi metadati di schema persistiti e cache dello schema, il contesto deve anche implementare `IChillSchemaDbContext` e includere:
207
+
208
+ ```csharp
209
+ modelBuilder.AddChillSchemaModel();
210
+ ```
211
+
212
+ Poi registra:
213
+
214
+ ```csharp
215
+ builder.Services.AddChillSchema<AppDbContext>();
216
+ ```
217
+
218
+ ## 9. Requisiti Per Auth
219
+
220
+ Se vuoi autenticazione e permessi ChillSharp, il contesto deve implementare `IChillAuthDbContext` e includere:
221
+
222
+ ```csharp
223
+ modelBuilder.AddChillAuthModel();
224
+ ```
225
+
226
+ Poi registra uno tra:
227
+
228
+ ```csharp
229
+ builder.Services.AddChillAuthApi<AppDbContext>();
230
+ builder.Services.AddChillAuthIdentityApi<AppDbContext, IdentityUser>();
231
+ ```
232
+
233
+ ## 10. Requisiti Per I18n
234
+
235
+ Se vuoi storage e lookup di testi localizzati, il contesto deve implementare `IChillI18nDbContext` e includere:
236
+
237
+ ```csharp
238
+ modelBuilder.AddChillI18nModel();
239
+ ```
240
+
241
+ Poi registra:
242
+
243
+ ```csharp
244
+ builder.Services.AddChillI18nApi<AppDbContext>();
245
+ ```
246
+
247
+ ## 11. Raccomandazioni
248
+
249
+ - Preferisci ereditare da `ChillEntity` invece di implementare `IChillEntity` da zero.
250
+ - Usa GUID stabili in `UniquePropertyKeyString` e `UniqueEntityKeyString`.
251
+ - Marca solo le proprieta che vuoi davvero esporre nella superficie DTO/schema di Chill.
252
+ - Mantieni `GetLabel()` e `GetFullTextContent()` abbastanza economici da eseguire nei normali flussi CRUD.
253
+ - Restituisci una vera identita di richiesta da `GetCurrentUserName()` negli host API.
254
+ - Mantieni le impostazioni cultura specifiche del contesto nel contesto, non in global statici.
@@ -0,0 +1,190 @@
1
+ # Modello Dei Permessi
2
+
3
+ Versione originale in inglese: [English](../../PermissionModel/README.md)
4
+
5
+ Questo documento descrive il modello di autorizzazione implementato da `ChillSharp.Auth`.
6
+
7
+ ## Scopo
8
+
9
+ Il modello di permessi e progettato per rispondere in modo coerente a due domande:
10
+
11
+ - l'utente corrente puo eseguire un'operazione a livello entita?
12
+ - l'utente corrente puo vedere o modificare una specifica proprieta?
13
+
14
+ Lo stesso modello supporta sia:
15
+
16
+ - enforcement lato server
17
+ - filtraggio delle capability lato client
18
+
19
+ ## Soggetti
20
+
21
+ I permessi possono essere assegnati a:
22
+
23
+ - un utente
24
+ - un ruolo
25
+
26
+ Un utente puo appartenere a piu ruoli.
27
+
28
+ ## Gerarchia Della Risorsa
29
+
30
+ I permessi vengono valutati su una gerarchia a tre livelli:
31
+
32
+ ```text
33
+ Module -> Entity -> Property
34
+ ```
35
+
36
+ ### Module
37
+
38
+ Un modulo e un'area logica dell'applicazione, per esempio:
39
+
40
+ - `Accounting`
41
+ - `Accounting.General`
42
+ - `Blog`
43
+ - `Blog.Admin`
44
+
45
+ I nomi modulo possono essere gerarchici.
46
+
47
+ ### Entity
48
+
49
+ Un'entita e un nome Chill entity dentro un modulo, per esempio:
50
+
51
+ - `Blog`
52
+ - `Post`
53
+ - `AuthUser`
54
+
55
+ ### Property
56
+
57
+ Una proprieta e un campo di un'entita, per esempio:
58
+
59
+ - `Title`
60
+ - `Author`
61
+ - `CanManagePermissions`
62
+
63
+ ## Azioni
64
+
65
+ ### Azioni entita
66
+
67
+ - `Query`
68
+ - `Create`
69
+ - `Update`
70
+ - `Delete`
71
+
72
+ ### Azioni proprieta
73
+
74
+ - `See`
75
+ - `Modify`
76
+
77
+ I permessi proprieta raffinano un'operazione entita gia consentita. Non sostituiscono i permessi entita.
78
+
79
+ ## Effetti
80
+
81
+ Ogni regola ha un effetto:
82
+
83
+ - `Allow`
84
+ - `Deny`
85
+
86
+ Allo stesso livello di valutazione, `Deny` vince su `Allow`.
87
+
88
+ ## Precedenza
89
+
90
+ ChillSharp risolve le regole in questo ordine:
91
+
92
+ 1. regole proprieta utente
93
+ 2. regole entita utente
94
+ 3. regole modulo utente
95
+ 4. regole proprieta ruolo
96
+ 5. regole entita ruolo
97
+ 6. regole modulo ruolo
98
+ 7. deny di default
99
+
100
+ Questo combina due principi:
101
+
102
+ - le regole utente sovrascrivono quelle dei ruoli
103
+ - le regole piu specifiche sovrascrivono quelle piu ampie
104
+
105
+ ## Come Vengono Valutate Le Operazioni
106
+
107
+ ### Query
108
+
109
+ Per interrogare un'entita:
110
+
111
+ 1. l'utente deve avere `Query` a livello entita
112
+ 2. ogni proprieta restituita deve avere anche `See`
113
+
114
+ Se una proprieta non e consentita, il server puo rimuoverla, impostarla a null o mascherarla a seconda della superficie chiamante e dell'implementazione.
115
+
116
+ ### Create
117
+
118
+ Per creare un'entita:
119
+
120
+ 1. l'utente deve avere `Create` a livello entita
121
+ 2. ogni proprieta fornita deve avere `Modify`
122
+
123
+ ### Update
124
+
125
+ Per aggiornare un'entita:
126
+
127
+ 1. l'utente deve avere `Update` a livello entita
128
+ 2. ogni proprieta modificata deve avere `Modify`
129
+
130
+ ### Delete
131
+
132
+ Per eliminare un'entita:
133
+
134
+ 1. l'utente deve avere `Delete` a livello entita
135
+
136
+ I permessi proprieta non contano nel delete.
137
+
138
+ ## Postura Di Sicurezza Predefinita
139
+
140
+ Il modello e default-deny.
141
+
142
+ Se nessuna regola concede accesso, l'accesso viene negato.
143
+
144
+ Questo e intenzionale. Evita che nuove entita o proprieta diventino visibili solo perche sono state aggiunte al modello.
145
+
146
+ ## Esempi Tipici Di Regole
147
+
148
+ Consentire la query di tutte le entita blog in un modulo:
149
+
150
+ ```text
151
+ Allow Query Module=Blog
152
+ ```
153
+
154
+ Consentire l'update dei post:
155
+
156
+ ```text
157
+ Allow Update Module=Blog Entity=Post
158
+ ```
159
+
160
+ Bloccare l'editing di una proprieta sensibile pur consentendo update piu ampi:
161
+
162
+ ```text
163
+ Allow Update Module=Blog Entity=Post
164
+ Deny Modify Module=Blog Entity=Post Property=InternalNotes
165
+ ```
166
+
167
+ ## Perche Questo Conta Per I Client
168
+
169
+ I client possono usare gli endpoint di valutazione permessi per:
170
+
171
+ - disabilitare azioni UI
172
+ - nascondere campi
173
+ - decidere quali editor di proprieta renderizzare
174
+
175
+ Ma il server resta la fonte di verita. Il filtraggio lato client e comodita, non sicurezza.
176
+
177
+ ## Componenti Runtime Correlati
178
+
179
+ Il modello di permessi e supportato da:
180
+
181
+ - `AuthUser`
182
+ - `AuthRole`
183
+ - `AuthUserRole`
184
+ - `AuthPermissionRule`
185
+
186
+ Gli endpoint di gestione sono esposti tramite `ChillSharp.Auth`.
187
+
188
+ Per registrazione e flussi account, vedi:
189
+
190
+ - [AuthenticationModel/README.md](../AuthenticationModel/README.md)
@@ -0,0 +1,172 @@
1
+ # Documentazione ChillSharp
2
+
3
+ Versione originale in inglese: [English](../README.md)
4
+
5
+ Questa cartella contiene la documentazione di riferimento di ChillSharp.
6
+
7
+ `doc/HowTo` resta intenzionalmente la sezione tutorial. Usala per esempi guidati e incrementali. Il resto di questa cartella e la versione di riferimento: concetti, registrazione, permessi, autenticazione e workflow di generazione client.
8
+
9
+ ## Mappa Della Documentazione
10
+
11
+ - [ModelPreparation.md](./ModelPreparation.md)
12
+ Prepara un modello EF Core in modo che ChillSharp possa attivare le entita, eseguire gli hook del ciclo di vita, generare metadati di schema e salvare i campi di audit.
13
+
14
+ - [ReferenceExistence.md](./ReferenceExistence.md)
15
+ Verifica se un riferimento EF Core ha valori di chiave esterna senza caricare l'entita correlata, anche con database senza vincoli FK applicati.
16
+
17
+ - [RegisterContext.md](./RegisterContext.md)
18
+ Registra i moduli ChillSharp su un `DbContext` host e mappa la superficie API.
19
+
20
+ - [AuthenticationModel/README.md](./AuthenticationModel/README.md)
21
+ Flussi account basati su Identity, endpoint di gestione auth, strategie di bootstrap e configurazione di API protette.
22
+
23
+ - [CurrentUserPreferences.md](./CurrentUserPreferences.md)
24
+ Preferenze in cache di cultura, fuso orario e formati dell'utente autenticato per `IChillContext` e gli hook del ciclo di vita delle entita.
25
+
26
+ - [PermissionModel/README.md](./PermissionModel/README.md)
27
+ Il modello di permessi usato da `ChillSharp.Auth`, incluse precedenza, scope e modalita di risoluzione dell'accesso a entita e proprieta.
28
+
29
+ - [ClientGeneration/README.md](./ClientGeneration/README.md)
30
+ Genera librerie client da un host ChillSharp per TypeScript e Python usando un documento OpenAPI esposto dall'applicazione host.
31
+
32
+ - [../../ext/chill-sharp-ts-client/README.md](../../ext/chill-sharp-ts-client/README.md)
33
+ Client TypeScript generico per servizi ChillSharp.
34
+
35
+ - [../../ext/chill-sharp-react-client/README.md](../../ext/chill-sharp-react-client/README.md)
36
+ Provider e hook React costruiti sopra il client TypeScript generico.
37
+
38
+ - [../../ext/chill-sharp-vue-client/README.md](../../ext/chill-sharp-vue-client/README.md)
39
+ Plugin e composable Vue costruiti sopra il client TypeScript generico.
40
+
41
+ - [../../ext/chill-sharp-ng-client/README.md](../../ext/chill-sharp-ng-client/README.md)
42
+ Helper DI Angular e servizio RxJS costruiti sopra il client TypeScript generico.
43
+
44
+ - [../../ext/chill-sharp-py-client/README.md](../../ext/chill-sharp-py-client/README.md)
45
+ Client Python generico per servizi ChillSharp.
46
+
47
+ ## Moduli Principali
48
+
49
+ - `ChillSharp`
50
+ Motore core per entita, motore DTO e superficie HTTP API.
51
+
52
+ - `ChillSharp.Schema`
53
+ Generazione schema, persistenza e cache dello schema.
54
+
55
+ - `ChillSharp.Auth`
56
+ Modello di autorizzazione, regole di permesso, gestione ruoli/utenti e integrazione opzionale con ASP.NET Core Identity.
57
+
58
+ - `ChillSharp.I18n`
59
+ Endpoint di lookup per label e testi piu cache i18n in memoria.
60
+
61
+ - `ChillSharp.Client`
62
+ Client .NET per gli endpoint ChillSharp e ChillSharp.Auth.
63
+
64
+ - `ext/chill-sharp-ts-client`
65
+ Pacchetto client TypeScript generico.
66
+
67
+ - `ext/chill-sharp-react-client`
68
+ Pacchetto di integrazione React sopra il client TypeScript.
69
+
70
+ - `ext/chill-sharp-vue-client`
71
+ Pacchetto di integrazione Vue sopra il client TypeScript.
72
+
73
+ - `ext/chill-sharp-ng-client`
74
+ Pacchetto di integrazione Angular sopra il client TypeScript.
75
+
76
+ - `ext/chill-sharp-py-client`
77
+ Pacchetto client Python generico.
78
+
79
+ ## Concetti Base
80
+
81
+ ### `IChillContext`
82
+
83
+ Il tuo contesto EF Core deve implementare `IChillContext`. Definisce:
84
+
85
+ - il prefisso Chill type usato per l'attivazione dinamica
86
+ - le culture primaria e secondaria usate per interpretare le label di schema
87
+ - il nome utente corrente usato dal tracciamento di audit delle entita
88
+
89
+ Possono coesistere contesti diversi con valori diversi. ChillSharp non assume una singola configurazione globale.
90
+
91
+ ### `ChillEntity`
92
+
93
+ `ChillEntity` e la classe base consigliata per i tipi di modello esposti tramite ChillSharp. Fornisce gia:
94
+
95
+ - `Guid`
96
+ - `Label`, `ShortLabel`, `FullTextContent`
97
+ - `Checksum`, `LastUpdateUser`, `LastUpdate`, `LastUpdateUtcOffset`
98
+ - comportamento di ciclo di vita predefinito
99
+
100
+ Gli hook disponibili sono:
101
+
102
+ - `OnCreate`
103
+ - `OnUpdate`
104
+ - `OnAfterUpdate`
105
+ - `OnDelete`
106
+ - `OnAfterDelete`
107
+ - `OnSelect`
108
+ - `OnInflate`
109
+ - `OnAutocomplete`
110
+
111
+ ### Metadati Di Schema
112
+
113
+ `ChillEntityAttribute` e `ChillPropertyAttribute` forniscono:
114
+
115
+ - chiavi univoche stabili
116
+ - `PrimaryLanguageLabel`
117
+ - `SecondaryLanguageLabel`
118
+
119
+ Quando ChillSharp costruisce uno schema, risolve quelle label usando:
120
+
121
+ - `CultureInfo.CurrentUICulture`
122
+ - `IChillContext.GetPrimaryCultureName()`
123
+ - `IChillContext.GetSecondaryCultureName()`
124
+
125
+ ### Campi Di Audit
126
+
127
+ Dopo gli aggiornamenti, ChillSharp salva automaticamente:
128
+
129
+ - `Checksum`
130
+ - `LastUpdateUser`
131
+ - `LastUpdate`
132
+ - `LastUpdateUtcOffset`
133
+
134
+ La logica di audit e applicata tramite il percorso `IChillEntity` usato da `ChillEngine`, quindi una classe derivata puo ridefinire `OnAfterUpdate()` senza saltare l'aggiornamento di audit della base.
135
+
136
+ ## Superficie API
137
+
138
+ La superficie API core viene esposta da:
139
+
140
+ - `app.MapChillApi()`
141
+
142
+ Questo mappa i controller Chill API e include anche:
143
+
144
+ - `/api/chill/test`
145
+ - `/api/chill/license`
146
+
147
+ A seconda dei moduli registrati, lo stesso host puo esporre anche:
148
+
149
+ - servizi schema tramite `ChillSharp.Schema`
150
+ - servizi auth/account e di gestione permessi tramite `ChillSharp.Auth`
151
+ - endpoint testo i18n tramite `ChillSharp.I18n`
152
+
153
+ ## Riferimento Vs How-To
154
+
155
+ Usa questa separazione in modo coerente:
156
+
157
+ - `doc/HowTo`
158
+ Tutorial passo-passo. Mantienili focalizzati e orientati al task.
159
+
160
+ - il resto di `doc/`
161
+ Documentazione di riferimento. Usa questi file quando ti servono modello, registrazione, architettura, regole di permesso o dettagli di integrazione.
162
+
163
+ ## How-To
164
+
165
+ I tutorial esistenti sono disponibili anche in italiano:
166
+
167
+ - [HowTo/01-simple-blog-sqlite.md](./HowTo/01-simple-blog-sqlite.md)
168
+ - [HowTo/02-blog-schema-labels.md](./HowTo/02-blog-schema-labels.md)
169
+ - [HowTo/03-authentication.md](./HowTo/03-authentication.md)
170
+ - [HowTo/04-blog-posts-one-to-many.md](./HowTo/04-blog-posts-one-to-many.md)
171
+ - [HowTo/05-docker-env-variables.md](./HowTo/05-docker-env-variables.md)
172
+ - [HowTo/06-chunk-transactions-autocomplete.md](./HowTo/06-chunk-transactions-autocomplete.md)