defineApplicationRole() markiert ist (siehe Die Standardfunktionsrolle unten).
src/roles/restricted-company-role.ts
Zeilenbasierte Sicherheit
Objekt- und Feldberechtigungen legen fest, auf welche Objekte und Felder eine Rolle zugreifen kann. Zeilenbasierte Berechtigungsprädikate gehen noch weiter und legen fest, welche Datensätze eine Rolle sehen und bearbeiten kann — zum Beispiel eine Self-Service-Rolle, bei der jeder externe Benutzer nur seine eigenen Datensätze sieht. Deklarieren Sie Prädikate mitrowLevelPermissionPredicates für die Rolle. Wie beim Rest des Manifests hat
jedes Prädikat einen eigenen universalIdentifier und referenziert ein Objekt und ein Feld über deren
universalIdentifier; außerdem besitzt es einen operand und (optional) ein workspaceMember-Feld, dessen Wert zur Abfragezeit injiziert wird — sodass Sie ausdrücken können: “Die Eigentümerbeziehung des Datensatzes ist das aktuelle workspaceMember”:
src/roles/partner-role.ts
Kombinieren von Prädikaten mit Gruppen
Standardmäßig werden die Prädikate einer Rolle mitAND verknüpft. Um einige von ihnen mit OR zu verknüpfen (oder um Logik zu verschachteln), deklarieren Sie einen Eintrag rowLevelPermissionPredicateGroups und verweisen Sie von jedem Prädikat aus über predicateGroupUniversalIdentifier darauf. Diese Rolle ermöglicht es einem Partner, eine Opportunity zu sehen, deren er entweder Eigentümer
oder der Ansprechpartner ist:
src/roles/partner-opportunities-role.ts
- Geben Sie jedem Prädikat und jeder Gruppe einen stabilen
universalIdentifier(beliebige uuid) – er identifiziert die Entität über Upgrades hinweg eindeutig, und Prädikate verweisen über ihn auf Gruppen. - Prädikate können auf Objekte und Felder verweisen, die Ihrer App gehören, oder auf Standardobjekte von Twenty.
- Zeilenbasierte Sicherheit wird für Workspaces in Tarifen durchgesetzt, die sie enthalten; die Prädikate werden auch in anderen Tarifen weiterhin synchronisiert, sie werden dort einfach nicht durchgesetzt.
Die Standard-Funktionsrolle
Wenn Sie eine neue App erzeugen, erstellt die CLI eine Datei für die Standardrolle, die mitdefineApplicationRole() deklariert ist:
src/roles/default-role.ts
defineApplicationRole() ist ein dünner Wrapper um defineRole(), der die Rolle kennzeichnet, die zum Installationszeitpunkt als Standardrolle Ihrer Anwendung verwendet wird. Die Validierung ist identisch zu defineRole, aber die Build-Pipeline verdrahtet deren universalIdentifier automatisch in das defaultRoleUniversalIdentifier des Anwendungsmanifests – sodass Sie es nicht selbst aus defineApplication referenzieren müssen.
Notizen:
- Genau eine
defineApplicationRole(...)ist pro App zulässig – der Manifest-Build schlägt fehl, wenn mehr als eine gefunden wird. - Verwenden Sie
defineRole()(nichtdefineApplicationRole()) für alle zusätzlichen Rollen, die Ihre App mitliefert. - Das explizite Setzen von
defaultRoleUniversalIdentifierindefineApplication()wird für die Abwärtskompatibilität weiterhin unterstützt, ist aber zugunsten vondefineApplicationRole()veraltet.
Beste Praktiken
- Beginnen Sie mit der vorgegebenen Rolle und schränken Sie sie dann schrittweise ein – standardmäßig wird umfangreicher Lesezugriff gewährt, was selten das ist, was Sie in Produktionsumgebungen möchten.
- Ersetzen Sie
objectPermissionsundfieldPermissionsdurch die genauen Objekte und Felder, die Ihre Funktionen tatsächlich benötigen. permissionFlagUniversalIdentifierssteuern den Zugriff auf Funktionen auf Plattformebene. Halten Sie sie minimal.- Ein funktionierendes Beispiel finden Sie unter:
hello-world/src/roles/function-role.ts.