defineApplicationRole() (voir Le rôle de fonction par défaut ci-dessous).
src/roles/restricted-company-role.ts
Sécurité au niveau des lignes
Les autorisations d’objet et de champ déterminent à quels objets et champs un rôle peut accéder. Les prédicats d’autorisation au niveau des lignes vont plus loin et déterminent quels enregistrements un rôle peut voir et sur lesquels il peut agir — par exemple, un rôle en libre-service où chaque utilisateur externe ne voit que ses propres enregistrements. Déclarez les prédicats avecrowLevelPermissionPredicates sur le rôle. Comme le reste du manifeste, chaque prédicat porte son propre universalIdentifier et fait référence à un objet et à un champ par leur universalIdentifier, un operand et (facultativement) un champ workspaceMember dont la valeur est injectée au moment de la requête — vous pouvez ainsi exprimer : “la relation de propriétaire de l’enregistrement est le membre de l’espace de travail actuel” :
src/roles/partner-role.ts
Combiner des prédicats avec des groupes
Par défaut, les prédicats d’un rôle sont combinés avecAND. Pour en combiner certains avec OR (ou pour imbriquer la logique), déclarez une entrée rowLevelPermissionPredicateGroups et faites pointer chaque prédicat vers celle-ci via predicateGroupUniversalIdentifier. Ce rôle permet à un partenaire de voir une opportunité qu’il possède ou pour laquelle il est le point de contact :
src/roles/partner-opportunities-role.ts
- Donnez à chaque prédicat et groupe un
universalIdentifierstable (n’importe quel uuid) — il sert de clé à l’entité lors des mises à niveau, et les prédicats référencent les groupes via celui-ci. - Les prédicats peuvent référencer des objets et des champs appartenant à votre application ou aux objets standard de Twenty.
- La sécurité au niveau des lignes est appliquée pour les espaces de travail sur les offres qui l’incluent ; les prédicats sont tout de même synchronisés sur les autres offres, ils ne sont simplement pas appliqués.
Le rôle de fonction par défaut
Lorsque vous générez une nouvelle application, la CLI crée un fichier de rôle par défaut déclaré avecdefineApplicationRole() :
src/roles/default-role.ts
defineApplicationRole() est un léger wrapper autour de defineRole() qui marque le rôle utilisé comme rôle par défaut de votre application au moment de l’installation. La validation est identique à defineRole, mais le pipeline de build connecte automatiquement son universalIdentifier au champ defaultRoleUniversalIdentifier du manifeste de l’application — vous n’avez donc pas besoin de le référencer vous-même depuis defineApplication.
Notes :
- Exactement un
defineApplicationRole(...)est autorisé par application — la génération du manifeste échouera si elle en trouve plus d’un. - Utilisez
defineRole()(et nondefineApplicationRole()) pour tous les rôles supplémentaires fournis par votre application. - Le fait de définir explicitement
defaultRoleUniversalIdentifierdansdefineApplication()est toujours pris en charge pour assurer la rétrocompatibilité, mais c’est obsolète et remplacé pardefineApplicationRole().
Meilleures pratiques
- Partez du rôle généré par le gabarit, puis restreignez-le progressivement — par défaut, il accorde un large accès en lecture, ce qui correspond rarement à ce que vous voulez en production.
- Remplacez
objectPermissionsetfieldPermissionspar les objets et champs dont vos fonctions ont réellement besoin. permissionFlagUniversalIdentifierscontrôlent l’accès aux capacités au niveau de la plateforme. Maintenez-les au strict minimum.- Voir un exemple fonctionnel :
hello-world/src/roles/function-role.ts.