Description du fonctionnement standard de l’appartenance des fiches dans les groupes
Un exemple de hiérarchie des groupes
Comme exemple pour le reste de cet article, prenons la hiérarchie des groupes suivante :
- Monde
- Europe
- Italie
- Rome
- Venise
- Grèce (Achille)
- Athènes
- Italie
- Asie
- Turquie
- Troie (Hector)
- Chine
- Vietnam
- Turquie
- Europe
Dans cet exemple, on a deux utilisateurs :
- Achille a un rôle sur le groupe “Grèce” (par exemple médecin)
- Hector a un rôle sur le groupe “Troie” (par exemple infirmier)
Que se passe-t-il lors de l’enregistrement d’une fiche ?
Par défaut, dans Voozanoo 4, lorsqu’un utilisateur enregistre une fiche, la fiche est enregistrée dans son(ses) groupe(s) et dans tous les groupes parents.
Par exemple :
- si Achille enregistre une fiche, elle sera placée dans les groupes Grèce, Europe et Monde ;
- si Hector enregistre une fiche, elle sera placée dans les groupes Troie, Turquie, Europe et Monde.
Ceci permet ensuite de gérer les droits de lecture, d’édition et de suppression groupe par groupe si on le souhaite.
Comment est-ce modélisé en base de données ?
Pour chaque varset du projet (par exemple, le varset patient
), il existe une table {pj}_patient_data_group
.
Celle-ci est une table de liaison entre :
{pj}_patient_data
qui contient les données patient ;{pj}_pj_group
qui contient les groupes.
On pourrait par exemple avoir ceci dans cette table pour le patient n°41 :
mysql> select * from {pj}_patient_data_group where id_data = 41;
+ ------------- + ------- + -------- +
| id_data_group | id_data | id_group |
+ --------------+---------+----------+
| 45 | 41 | 1 |
| 46 | 41 | 15 |
| 47 | 41 | 23 |
+ --------------+---------+----------+
3 rows in set (0.00 sec)
Cette fiche appartient aux groupes 1 (Monde), 15 (Europe) et 23 (Grèce). Elle a probablement été créée par Achille.
Comment cela fonctionne-t-il pour la gestion des droits ?
La gestion des droits par varset est expliqué dans le manuel utilisateur de Voozanoo 4 disponible ici.
Gardons l’exemple du patient n°41 ci-dessus qui appartient aux groupes Monde, Europe et Grèce.
On distingue trois cas :
Cas | Paramétrage des droits pour le varset patient | L’utilisateur voit la fiche si… | Remarques |
---|---|---|---|
1 | L’utilisateur a un rôle qui a lecture pour tous de coché | Toujours | Aucune |
2 | L’utilisateur a un rôle qui a lecture pour le propriétaire de coché | Seulement s’il la créé lui-même | C’est la colonne id_owner de la table {pj}_patient_data qui est utilisée pour cela. Attention : cet id_owner fait référence à l’id_group de l’utilisateur, pas à son id_data ! |
3 | L’utilisateur a un rôle qui a lecture pour le groupe de coché | Seulement si l’utilisateur a un rôle dans dans Monde, Europe ou Grèce | C’est là que la table {pj}_patient_data_group est utilisée. |
Qu’est-ce que le sys_group ?
Les colonnes sys_group
sont calculées à la volée et contiennent un résumé des groupes d’appartenance des fiches.
Dans ce résumé, les informations en doublon sont retirées. Ainsi, si une fiche est dans Monde, Asie et dans Chine, seule Chine sera signalée parce que les deux autres groupes peuvent être déduits de cette information.
Les droits de l’utilisateur n’ont aucun impact. Ainsi, si ce qui est affiché dans sys_group
est toujours complet, même si la visibilité d’un utilisateur est d’habitude limité à son groupe (exemple : un utilisateur d’Europe ne voit généralement pas les groupes d’Asie).
Voici quelques exemples :
Appartenance d’après la table {pj}_patient_data_group | Affichage dans sys_group |
---|---|
Grèce, Europe et Monde | Grèce |
Troie, Turquie, Europe et Monde | Troie |
Venise, Itale, Europe, Monde, Chine, Asie (cas rare d’appartenance multiple) | Venise, Chine |