Chargement d'une page GRIST réservée aux utilisateurs authentifiés

Bonjour,
Nous développons un portail dans Grist avec un widget personnalisé servant de bandeau de navigation. Nous souhaiterions afficher, sous ce bandeau, une autre page du même document Grist réservée aux utilisateurs authentifiés.

Actuellement, l’intégration par iframe ne fonctionne pas : la route de présentation affiche « Accès refusé » et la page interne authentifiée ne se charge pas dans l’iframe.

Existe-t-il une solution officiellement prise en charge pour :

  • intégrer une page authentifiée du même document dans un widget ;

  • transmettre ou conserver la session de l’utilisateur ;

  • changer le contenu sous un bandeau permanent sans recharger toute la page ?

Est-ce une fonctionnalité prévue à court terme, ou recommandez-vous une autre architecture — navigation interne, widget conteneur, API ou composant partagé ?

Bonjour Simon,
Sur l’une de mes productions, un même custom widget permet d’afficher des informations différentes selon les droits d’accès de l’utilisateur : un utilisateur non identifié disposant d’un lien public en modification ne verra qu’une partie du widget, tandis qu’un autre utilisateur identifié verra autre chose, selon son profil d’authentification. C’est donc faisable techniquement , à condition d’avoir une gestion fine des ACL et les bons appels de l’API Grist dans le widget.

Tu peux nous présenter plus précisément le projet ?

Merci pour votre réponse.

Notre projet est un observatoire cartographique construit dans un document Grist. Nous avons développé un widget personnalisé servant de portail, avec un bandeau de navigation permettant d’afficher différents contenus : Accueil, Carte, fiches de projets et Espace contributeur.

Les pages Accueil, Carte et fiches peuvent être publiques. En revanche, l’Espace contributeur doit être réservé aux utilisateurs authentifiés et leur permettre, au moyen d’une interface simplifiée distincte de l’interface interne de Grist :

  • de proposer un projet ;

  • de modifier les projets auxquels ils ont accès ;

  • de rédiger une description en Markdown avec aperçu ;

  • de saisir les coordonnées GPS et les catégories ;

  • de déposer des images.

Notre difficulté concerne précisément l’intégration de cet espace sous le bandeau. Lorsqu’une page interne Grist authentifiée est chargée dans une iframe depuis le custom widget, nous ne savons pas si la session et les droits de l’utilisateur peuvent être conservés.

Pouvez-vous nous préciser :

  1. si une page Grist interne authentifiée peut être intégrée dans l’iframe d’un custom widget en conservant la session ou s’il faut obligatoirement reconstruire l’interface contributeur dans le widget et utiliser l’API Grist ;

  2. comment le widget peut connaître l’identité de l’utilisateur connecté pour appliquer des ACL basées, par exemple, sur son adresse électronique ; et si les ACL peuvent permettre à un contributeur extérieur de modifier uniquement ses propres projets, sans lui ouvrir l’interface interne complète du document.

  3. si l’API des custom widgets permet aussi de déposer et d’associer des pièces jointes à une ligne ;

Nous souhaitons éviter un lien public en modification : chaque contributeur devra être identifié et ses droits devront être limités aux données qui le concernent.

Les vues Grist limitent notre capacité à charger dynamiquement plusieurs pages natives sous un même bandeau. Toutefois, elles ne bloquent pas la création d’un portail contributeur : celui-ci doit plutôt être construit entièrement dans le widget, avec les ACL appliquées directement aux données.

Bonjour,

Je ne suis pas sur d’avoir compris le point n°1.

Pour le point 2 : L’identité de l’utilisateur n’est pas connu par le widget, mais par Grist : un utilisateur disposant des bons droits d’accès aux tables Grist utilisées par le widget pourra, le cas échéant lire / mettre à jour / créer / supprimer les données des tables en passant par le widget.

L’identité d’un utilisateur peut être connu par Grist de deux manières :

  • L’utilisateur dispose d’un compte Grist, associé à une adresse mail (il est connecté). Cette adresse mail permet de l’authentifier et d’établir des règles d’accès particulières (règle d’utilisateur).
  • L’utilisateur ne dispose pas d’un compte Grist, il accède au document de manière déconnecté par l’URL publique, en lecture seule ou en profil éditeur. L’utilisateur peut-être authentifié dans les ACL par la fonction Linkkey qui permet de concaténer à l’URL publique une clé d’authentification individuelle, qu’il convient d’avoir généré et distribué en amont.

Il est donc tout à fait possible de faire cohabiter deux profils de droits sur le même widget à condition d’avoir paramétré correctement les tables du projet.

Point 3 : je ne maîtrise pas le sujet dans sa globalité mais je sais que l’API de Grist permet en effet de déposer et d’associer des PJ à une ligne ; dans la limite des capacités de stockage du projet. Ce que je ne sais pas : quel accès des utilisateurs à l’ensemble des PJ ; quelles restrictions sur le format de PJ acceptées ; quelles capacités du widget à lire/afficher différents formats de fichier.

Merci pour votre réponse. Cela m’aide à comprendre le fonctionnement des droits d’accès.

Ma question concerne surtout l’affichage : j’ai créé un widget avec un bandeau de navigation. Lorsque l’utilisateur clique sur un bouton, je voudrais afficher en dessous une autre page du même document Grist.

Pour la page « Espace contributeur », l’utilisateur connecté doit pouvoir modifier les données selon ses droits.

Est-il possible d’afficher directement cette page Grist sous le bandeau tout en conservant la connexion de l’utilisateur ?

Ou faut-il obligatoirement recréer entièrement le formulaire et l’interface à l’intérieur du widget ?

C’est principalement ce point d’intégration que je cherche à éclaircir.

C’est difficile de se figurer la configuration sans accéder au document.

Si par “page espace contributeur” vous voulez dire une page Grist, accessible depuis l’interface Grist via la colonne à gauche de l’écran, alors : cette page peut-être affichée ou masquée selon les ACL de l’utilisateur. Si l’utilisateur n’a pas droit de lecture sur la table de données associée à la page, alors celle ci ne s’affiche pas.

Est-il possible d’afficher directement cette page Grist sous le bandeau ?

Non, car si j’ai bien compris, le bandeau est contenu dans un widget stocké dans une page Grist qui n’est pas la page “Espace contributeur”. Il faudra que l’utilisateur “sorte” du widget en cliquant sur la page “Espace contributeur”. Sa connexion au widget ne sera perdu, et sa progression pourra être sauvegardée.

Pour que l’espace contributeur soit affiché sous le bandeau, son contenu doit être codé dans le widget. Via les ACL, seuls les utilisateurs disposant des bons droits pourront accéder à la rubrique “Espace contributeur”, sans perte de connexion.