Coucou Laura,
Le plus simple à mon sens est de procéder en 2 étapes :
Étape 1 :
Dans la table utilisateurs, définir pour chaque email la liste des CRTE autorisés en lecture ou en écriture
Étape 2 :
Dans les permissions, aller chercher cette information, et autoriser la lecture/écriture des lignes correspondant au CRTE uniquement aux utilisateurs autorisés
Pas à pas :
Le document d’exemple est disponible ici : Ex - droits d'accès "en cascade" - Grist
Partons du principe que vous avez :
- une table source avec les départements
- une table source avec les régions
- une table source avec les arrondissements
- une table source avec les CRTE et leurs régions, départements et arrondissements correspondants.
- une table « Projets » sur laquelle vous souhaitez appliquer les permissions, avec pour chaque projet de la table, un CRTE associé
Etape 1 :
- Sachant que chaque CRTE correspond à 1 seul département et 1 seule région, mais peut correspondre à 1 ou plusieurs arrondissements
- Créer une table utilisateurs avec :
- une colonne « email »
- une colonne « arrondissement » - référence multiple à la table source arrondissements
- une colonne « département » - référence à la table source départements
- une colonne « région » - référence à la table source régions
- une colonne « droits » - choix unique entre « écriture » et « lecture »
- une colonne : « Liste CRTE lecture » avec la formule suivante, qui permettra d’obtenir la liste des CRTE autorisés en lecture
if $droits == "écriture" or $droits == "":
return None
else:
if $region:
return CRTE.lookupRecords(reg=$region).nom
elif $departement:
return CRTE.lookupRecords(dep = $departement).nom
elif $arrondissement:
return CRTE.lookupRecords(arr=CONTAINS($arrondissement)).nom
else:
return None
- une colonne : « Liste CRTE écriture » avec la formule suivante, qui permettra d’obtenir la liste des CRTE autorisés en écriture
if $droits == "lecture" or $droits == "":
return None
else:
if $region:
return CRTE.lookupRecords(reg=$region).nom
elif $departement:
return CRTE.lookupRecords(dep = $departement).nom
elif $arrondissement:
return CRTE.lookupRecords(arr=CONTAINS($arrondissement)).nom
else:
return None
Etape 2 :
- Dans la table « Projets », ajoutez une colonne d’assistance « CRTE_txt » avec la formule
$CRTE.nompour récupérer le texte brut du CRTE
- Dans les permissions avancées, ajoutez votre table d’appairage utilisateurs, et les règles suivante sur la table Projets :
rec.CRTE_txt in user.props.Liste_CRTE_ecriture→ tous les droits
rec.CRTE_txt in user.props.Liste_CRTE_lecture→ uniquement le droit de lecture
Et voilà ![]()
NB : il faudra passer les formules en « formule d’initialisation » pour préserver les performances du document.
Démonstration des permissions selon l’utilisateur·ice :

PS : si quelqu’un a des idées pour améliorer les formules, n’hésitez-pas à commenter !


