Les restrictions (ex: restriction communales)

Les restrictions sont un principe qui permet à un adminstrateur de restreindre l'accès à un utilisateur, à certaines données uniquement, contre un peu de configuration côté application et base de données.

Ce principe est par exemple très utilisé au niveau des données cadastrales, afin de mettre en place des restrictions communale en renseignant, par exemple, le code INSEE d'une ou plusieurs communes, afin que l'utilisateur ait seulement accès (en consultation et interrogation) aux données cadastrales de son territoire.

Configuration

Pour saisir une restriction, il faut se rendre dans la section "Utilisateurs" > "Utilisateurs" du menu latéral, puis éditer l'utilisateur sur lequel il faut définir une restruction (cliquer sur le bouton en forme de crayon à côté de l'utilisateur).

user_datagrid

Une fois dans l'interface de modifications, renseigner la restriction dans le champ Restriction de la section "Droits et restrictions".

restriction_modify_user

Note

La bonne syntaxe pour la chaîne de caractères est un ensemble de chaînes de caractères, séparés par un séparateur (le caractère |).
Par exemple, pour réaliser une restriction communales sur plusieurs communes, inscrire les Code INSEE séparés par le caractère |.

66106|66125|07324

Une fois la restriction côté utilisateur réalisée, il reste désormais à configurer la base de données afin que cette dernière utilise la restriction.

Paramétrage côté base de données

Côté base de données, les restrictions sont réalisées par l'intermédiaire de vues en utilisant une clause WHERE.

Exemple

Dans cet exemple, nous allons travailler avec la table des villes (data_demo_vmap.f_villes_f93) constituée des colonnes suivantes :

table_villes

Voici les étapes à réaliser :

1- Création de la vue 
2- Ajouter la clause `WHERE` en faisant référence à la restriction de l'utilisateur.

Pour créer la vue, cliquer droit sur "views" > "Create" > "View..."

create_view

Entrer un nom, et se rendre dans l'onglet "code" :

view_onglet_code

Dans l'onglet "Code", ajouter le code SQL suivant en adaptant le paramètre [nom de la colonne] :

WHERE [nom de la colonne] ~ similar_escape(( SELECT "user".restriction
FROM s_vitis."user"
WHERE "user".login::name = "current_user"()), NULL::text);

Note

[nom de la colonne] correspond au nom du champ référencé dans le champ Restriction de l'utilisateur.
Exemple : code_insee, code_com, code_dep.

Dans notre exemple, le code suivant permet de filtrer les villes en fonction du champ code correspondant au Code INSEE de la commune:

WHERE f_villes_93.code ~ similar_escape(( SELECT "user".restriction
FROM s_vitis."user"
WHERE "user".login::name = "current_user"()), NULL::text);

Ce code SQL rajoute une condition WHERE à la vue dont l'aspect final est celui-ci :

code_sql_vue

Test

Afin de tester si la restriction fonctionne, se connecter à la base de données et exécuter une requête SELECT sur la vue en changeant d'utilisateur (exemple ci-dessous avec l'utilisateur kyllian) :

filtre_fonctionnel

Les restrictions dans le module Cadastre.

Tout le module cadastre de vMap utilise nativement les restrictions expliquées ci-dessous. Excepté le champ Restriction qui doit être paramétré par l'administrateur, aucune vue ne doit être configurée car tout est déjà réalisé par Veremes.

Pour le module cadastre, l'utilisation la plus commune est de restreindre, pour un utilisateur donné, l'accessibilité à une ou plusieurs communes du territoire chargé en base de données.

Les données du cadastre étant sensibles, il est indispensable qu'un utilisateur puisse consulter et surtout interroger uniquement les données dont il doit avoir l'accès.

Exemple

Dans l'exemple ci-dessous, nous avons chargé les données cadastrales de l'ensemble des Pyrénées-Orientales.

Sans restriction (valeur % dans le champ restriction de l'utilisateur), un utilisateur a accès à la totalité des données des Pyrénées-Orientales.

restriction_cadastre_sans

Une fois la restriction mise en place (pour celle-ci, 66136|66210), seules les communes filtrées sont accessibles à l'utilisateur.

restriction_cadastre_avec