Le serveur cartographique GeoServer permet de gérer les droits d’accès à deux niveaux principaux : l’espace de travail et la couche. Ces deux éléments peuvent être rendus accessibles ou non selon les groupes et / ou les utilisateurs.

La solution proposée ici permet d’ajouter un niveau de contrôle plus fin, lorsqu’une couche est accessible, en filtrant dynamiquement les entités visibles pour un utilisateur donné et permet ainsi de répondre à des besoins de filtrage plus précis. Cette approche permet également d’éviter l’exposition des paramètres de filtrage dans l’URL, contrairement aux filtres CQL, et limite ainsi les risques de contournement par modification de ces valeurs.

Principe général

Cette solution repose sur la création d’une variable dans une base de données PostgreSQL uniquement. Elle est alors mobilisée lors de la configuration d’un entrepôt de données de type PostGIS, ainsi que dans une ou plusieurs vues SQL publiées dans GeoServer.

Les étapes suivantes permettent de reproduire ce mécanisme :

  1. En tant que super-utilisateur, créer la variable dans la base de données afin de stocker l’identifiant de l’utilisateur Geoserver connecté (ex : my.gs_user)

ALTER DATABASE ma_base SET « my.gs_user » TO  »;

  1. Déclarer et configurer un entrepôt de données de type PostGIS avec les instructions SQL suivantes :
    • Session startup SQL : Initialiser la variable avec l’identifiant de connexion Geoserver de l’utilisateur
    • Session close-up SQL : Réinitialiser la variable à sa valeur par défaut (chaîne de caractère vide)

3. Adapter les données en base en ajoutant une colonne « gs_user » à la table permettant de stocker l’identifiant de l’utilisateur associé à chaque entité

4. Créer les rôles, les groupes et les utilisateurs dans Geoserver, en cohérence avec les valeurs renseignées dans la colonne « gs_user »

5. Publier une vue SQL dans Geoserver afin de vérifier la correspondance entre la colonne « gs_user » et l’identifiant de connexion de l’utilisateur, récupérer par la variable

i. Créer une requête simple pour valider la vue
ii. Adapter la requête pour intégrer la variable

Résultats des paramétrages

Les images ci-dessous illustrent le comportement du filtrage :

  • Sans variable : Toutes les entités sont visibles
  • Utilisateur 1 : Accès limité à la région Auvergne-Rhône-Alpes
  • Utilisateur 2 : Accès limité à la région Bourgogne-Franche-Comté

Cette approche permet de mettre en place un contrôle d’accès fin au niveau des données. Elle reste flexible et adaptable pour gérer plusieurs utilisateurs ou groupes par entité selon les besoins métiers.