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).
Une fois dans l'interface de modifications, renseigner la restriction dans le champ Restriction
de la section "Droits et restrictions".
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 :
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..."
Entrer un nom, et se rendre dans l'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 :
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
) :
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.
Une fois la restriction mise en place (pour celle-ci, 66136|66210
), seules les communes filtrées sont accessibles à l'utilisateur.