Le blog francophone consacré
aux technologies Esri

Conseils & Astuces ArcGIS Online - N°171

N° 171 - Utiliser Arcade pour gérer des profils de données à afficher dans vos fenêtres contextuelles

Sur un portail ArcGIS, il est fréquent de créer une carte web et de l'utiliser dans plusieurs applications. Parfois ces applications sont à destination de différents profils d'utilisateurs. Dès lors, il peut être intéressant de prévoir l'affichage d'informations selon les utilisateurs adressés, en particulier pour ne pas charger inutilement les fenêtres contextuelles de vos cartes web en contenus inutiles et simplifier l'information présentée. Pour cela, les expressions Arcade peuvent vous aider à personnaliser le contenu de vos fenêtres contextuelles en prenant en compte le profil de l'utilisateur qui consulte votre carte.


L'exemple que je vous propose est illustré par l'image ci-dessus. Nous disposons d'une couche avec des parcelles cadastrales avec des attributs que nous ne souhaitons présenter (ou pas) selon le profil des utilisateurs qui consulte la carte web. Lorsque l'utilisateur n'est pas connecté, on veut lui présenter uniquement les informations d'identification de la parcelle. Lorsque l'utilisateur est connecté à l'organisation, on veut en plus lui présenter les informations de surfaces. Enfin, lorsque l'utilisateur est connecté et fait partie d'un groupe spécifique, alors il peut voir des informations plus détaillées sur la parcelle comme le propriétaire par exemple. A travers cet exemple, voici donc comment nous allons procéder :

  1. Connectez-vous tout d'abord sur votre portail ArcGIS. Vous vérifierez que vous avez créé un groupe contenant les utilisateurs qui auront accès à la totalité des informations dans la fenêtre contextuelle. Dans mon exemple, ce groupe se nomme "Equipe_Cadastre" et contient trois utilisateurs.  


  2. Vous ouvrirez ensuite la carte web contenant la couche d'entités dont vous souhaitez configurer la fenêtre contextuelle. Dans notre exemple, la carte web est destinée à différentes applications dont certaines sont publiques. La couche d'entités est donc partagée de manière publique. Par défaut, la fenêtre contextuelle présente la liste de tous les attributs. 


  3. Dans la zone de configuration des fenêtres contextuelles la couche, vous pouvez supprimer l'élément "Liste de champs" proposé par défaut puis ajouter un élément de contenu Arcade. Ce dernier nous permettra de réaliser les calculs statistiques nécessaires et configurer un rendu personnalisé (en HTML) de nos informations.


  4. Dans l'éditeur Arcade, vous effacerez les instructions déjà présentes par l'expression Arcade ci-dessous :
    // Nom du groupe des utilisateurs ayant accès à la totalité du contenu
    var group_name = "Equipe_Cadastre"
    var UserHasPrivileges = false
    
    // Récupération d'un nom de l'utilisateur. Si ce dernier est anonyme alors
    // la fonction GetUser renvoit un objet vide.
    var user_name = iif(IsEmpty(GetUser($layer, false)),"Anonyme",GetUser($layer, true).username)
    
    // On vérifie si l'utilisateur appartient au groupe ayant les privilèges
    // si ce n'est pas le cas la variable UserHasPrivileges reste à false
    if (user_name != "Anonyme"){
      var groups = GetUser($layer, false).groups
      for (var i in groups){
        if(Lower(groups[i].title)==Lower(group_name)){
          UserHasPrivileges=true
        }
      }
    }
    
    // On commence à construire la chaine HTML correspondant au contenu de la
    // fenêtre contextuelle à l'aide d'un élément <table>
    var HTML = "<table>"
    // On ajoute les attributs visibles par tout le monde
    HTML += "<tr><td>Code Commune :</td><td>"+$feature.CODCOMM+"</td></tr>"
    HTML += "<tr><td>Code Section :</td><td>"+$feature.CODSEC+"</td></tr>"
    HTML += "<tr><td>N° Parcelle :</td><td>"+$feature.NUMERO+"</td></tr>"
    
    // On ajoute ensuite les attributs visibles à tout utilisateur connecté
    if (user_name != "Anonyme"){
    HTML += "<tr><td>Adresse Parcelle :</td><td>"+$feature.Adresse+"</td></tr>"
    HTML += "<tr><td>Surface foncière :</td><td>"+$feature.SUPF+" m²</td></tr>"
    HTML += "<tr><td>Surface batie :</td><td>"+$feature.SUPB+" m²</td></tr>"
    }
    
    // On ajoute les attributs visibles aux utilisateurs du groupe "Equipe_Cadastre"
    if (UserHasPrivileges){
      HTML += "<tr><td>ID Propriétaire :</td><td>"+$feature.ID_Prop+"</td></tr>"
      HTML += "<tr><td>Nom Propriétaire :</td><td>"+$feature.Nom_Prop+"</td></tr>"  
      HTML += "<tr><td>Adresse Propriétaire :</td><td>"+$feature.Adresse_Prop+"</td></tr>"  
      HTML += "<tr><td>Valeur cadastrale :</td><td>"+$feature.Valeur_Cadastrale+" €</td></tr>" 
      HTML += "<tr><td>Bâtiments :</td><td>"+$feature.NB_BATIMENTS+"</td></tr>"  
      HTML += "<tr><td>Année de construction :</td><td>"+$feature["Année_Construction"]+"</td></tr>"  
    }
    // On termine la chaine HTML
    HTML += "</table>"
    
    // On renvoie la chaine HTML personnalisée en fonction du profil de l'utilisateur
    return { 
      type : 'text', 
      text : HTML
    }
    On notera l'usage de la fonction GetUser() qui permet de récupérer l'utilisateur actuellement connecté à la source de données du FeatureSet passé en paramètre. Dans le contexte d'une couche d'entités hébergée ArcGIS Online, il s'agit de l'utilisateur affichant la carte web. Si ce dernier n'est pas connecté et accède à la carte en tant qu'utilisateur "Anonyme", la fonction renvoie un dictionnaire vide.

    On notera également que la propriété "groups" du dictionnaire renvoyé par la fonction GetUser() permet de lister les groupes auxquels appartient l'utilisateur. 
     
  5. Vous pouvez maintenant cliquer sur le bouton "Terminé" pour valider l'expression.

  6. La fenêtre contextuelle s'affiche désormais avec les informations en fonction du profil de l'utilisateur courant.

    Ici je suis connecté avec un utilisateur faisant partie du groupe "Equipe_Cadastre", je visualise donc la fenêtre contextuelle complète.


    Ici, je suis connecté avec un utilisateur de l'organisation ne faisant pas partie du groupe "Equipe_Cadastre". Il ne voit donc pas les attributs sensibles.



    Ici, je suis connecté avec un utilisateur public ne faisant pas partie de l'organisation. Il ne voit donc pas les attributs sensibles.


    Ici, je ne suis pas connecté avec un utilisateur nommé. Je ne vois donc que les trois attributs de base.


Remarque : La méthode proposée ici permet de filtrer, dans la fenêtre contextuelle, les informations pertinentes en fonction du profil de l'utilisateur courant. Elle ne constitue cependant pas une protection absolue des données ainsi masquée. Par exemple, selon l'application dans laquelle la carte est affichée, les utilisateurs peuvent ouvrir la table de la couche avec la totalité des attributs. De même, cette couche peut potentiellement être accédée en dehors de votre carte web avec l'ensemble de ses attributs. Pour véritablement protéger l'accès à certains attributs, la création de vues est le mécanisme à privilégier.


J'espère que cet exemple vous inspirera et que vous pourrez l'adapter à vos cas d'usage.


Bonne route sur ArcGIS Online !
   
Pour retrouver l'ensemble des Conseils & Astuces ArcGIS Online, cliquez sur ce lien

Partager cet article:

Rejoindre la discussion

    Les commentaires à propos de cet article: