Deux solutions se projettent:
1. droits d'accès fixés par le programme
2. droits d'accès fixés du côté de la base de données
Solution 1:
L'idée est de ne pas afficher l'icône "modifier" pour les données clients qui ne concernent pas le commercial connecté
Pour celà, le commercial doit ouvrir une session authentifiée par un ID qui lui est propre.
Une requête SELECT des données clients doit pouvoir distinguer les clients sous la responsabilité du commercial pour n'afficher l'icône "modifier" que dans ce cas.
Une association Client/Commercial doit exister dans la base pour réussir le filtrage attendu.
En fait, dans la table "Client" il faut ajouter une clé étrangère qui identifie le commercial (son ID)
Solution 2:
Plus complexe que la première, mais plus sécurisée car indépendante du programme.
Cette solution consiste à créer un modèle de données sécurisé qui regroupe les clients par commercial dans des tables propres aux commerciaux.
Les commerciaux deviennent des utilisateurs de ces tables, on doit les créer alors dans la table des utilisateurs du SGBD. ce qui n'exclut pas le besoin de créer une table "commerciaux" qui contient l'identité complète du commercial. Le SGBD a besoin simplement de reconnaitre le commercial en tant qu'utilisateur pour valider ses accès.
Pour cela, il suffit de créer des ID utilisateurs correspondants aux ID des commerciaiux enregistrés
Le fait de distribuer les clients dans des tables portant les ID des commerciaux on peut assigner des droits d'accès SQL (SELECT, INSERT, UPDATE ou DELETE)
On peut automatiser ces taches en utilisant un trigger (programme SQL) qui se déclenche quand un commercial est ajouté dans la table "commerciaux". Je récapitule les taches à faire pour un commercial:
- Si le nouveau commercial est ajouté :
1. Créer une nouvelle table "client_xxx" où xxx est l'ID du nouveau commercial
2. Ajouter l'ID du commercial dans la table des utilisateurs du SGBD pour ainsi créer un utlisateur authentifié de la base de données
3. Donner au nouveau commercial/utilisateur par le biais de son ID le droit de lecture sur toutes les tables "client_xxx" des commerciaux y compris la sienne et le droit d'ajout/modification/suppression sur seulement la sienne
Exemple :
Soit : com1 et com2 deux commerciaux enregistrés en tant qu'utilisateurs dans le SGBD
On peut créer donc 2 tables : client_com1 et client_com2 : qui contiennent les données des clients de chaque commercial
et une table "commerciaux" qui contient 2 lignes d'infos complètes pour com1 et com2
En suite, il faut donner le droit "SELECT" (lecture) sur les 2 tables client_com1 et client_com2 pour les 2 commerciaux.
et les droits "INSERT, UPDATE et DELETE" pour chaque commercial sur sa table propre (com1 pour client_com1 et com2 pour client_com2)
Les droits SQL sont fixés par la command "GRANT"
Dans le programme, quand un commercial se connecte, une requête select est envoyée sur toutes les tables client tout commercial confondu.
L'icône "Modifier" ne doit être affichée que pour les données issues de la table "client_xxx" (où : xxx est l'ID ou le nom du commercial connecté)
Cette solution intègre bien sur la solution 1 mais elle est plus sécurisée.