Permissions avancées question

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.nom pour 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à :smiley:
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 :
droits dacces cascade

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

2 « J'aime »