defineApplicationRole() (vedi The default function role di seguito).
src/roles/restricted-company-role.ts
Sicurezza a livello di riga
Le autorizzazioni sugli oggetti e sui campi determinano quali oggetti e campi un ruolo può gestire. I predicati di autorizzazione a livello di riga vanno oltre e determinano quali record un ruolo può vedere e su cui può agire — per esempio, un ruolo self-service in cui ogni utente esterno vede solo i propri record. Dichiara i predicati conrowLevelPermissionPredicates sul ruolo. Come il resto del manifest,
ogni predicato ha il proprio universalIdentifier e fa riferimento a un oggetto e a un campo tramite il loro
universalIdentifier, un operand e (facoltativamente) un campo workspaceMember il cui valore viene iniettato
al momento della query — così puoi esprimere “la relazione di proprietario del record è l’attuale membro dello spazio di lavoro”:
src/roles/partner-role.ts
Combinare i predicati con i gruppi
Per impostazione predefinita, i predicati di un ruolo sono combinati conAND. Per combinarne alcuni con OR (o per annidare la logica), dichiara una voce rowLevelPermissionPredicateGroups e collega ogni predicato ad essa tramite predicateGroupUniversalIdentifier. Questo ruolo consente a un partner di vedere un’Opportunità di cui è proprietario
o per cui è il punto di contatto:
src/roles/partner-opportunities-role.ts
- Assegna a ogni predicato e gruppo un
universalIdentifierstabile (qualsiasi uuid) — identifica l’entità attraverso gli aggiornamenti e i predicati fanno riferimento ai gruppi tramite esso. - I predicati possono fare riferimento a oggetti e campi di proprietà della tua app o degli oggetti standard di Twenty.
- La sicurezza a livello di riga è applicata per gli spazi di lavoro sui piani che la includono; i predicati vengono comunque sincronizzati sugli altri piani, semplicemente non vengono applicati.
Ruolo funzione predefinito
Quando esegui lo scaffolding di una nuova app, la CLI crea un file di ruolo predefinito dichiarato condefineApplicationRole():
src/roles/default-role.ts
defineApplicationRole() è un leggero wrapper attorno a defineRole() che contrassegna il ruolo usato come predefinito per la tua applicazione al momento dell’installazione. La convalida è identica a defineRole, ma la pipeline di build collega automaticamente il suo universalIdentifier al defaultRoleUniversalIdentifier del manifest dell’applicazione — quindi non è necessario farvi riferimento in defineApplication.
Note:
- È consentita esattamente una chiamata a
defineApplicationRole(...)per app — la build del manifest avrà esito negativo se ne trova più di una. - Usa
defineRole()(nondefineApplicationRole()) per qualsiasi ruolo aggiuntivo fornito dalla tua app. - L’impostazione esplicita di
defaultRoleUniversalIdentifierindefineApplication()è ancora supportata per retrocompatibilità, ma è deprecata a favore didefineApplicationRole().
Migliori Pratiche
- Parti dal ruolo generato dallo scaffold, poi restringilo progressivamente: il ruolo predefinito concede un ampio accesso in lettura, che raramente è ciò che vuoi in produzione.
- Sostituisci
objectPermissionsefieldPermissionscon gli oggetti e i campi di cui le tue funzioni hanno realmente bisogno. permissionFlagUniversalIdentifierscontrollano l’accesso alle funzionalità a livello di piattaforma. Mantienili al minimo.- Vedi un esempio funzionante:
hello-world/src/roles/function-role.ts.