@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,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)
|
package/doc/it/README.md
ADDED
|
@@ -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)
|