appartenir à plusieurs groupe

appartenir à plusieurs groupe - PHP - Programmation

Marsh Posté le 18-07-2006 à 16:31:33    

Bonjour à tous,  
 
Je développe un site Intranet. Je dois donner des autorisations sur certaines pages car des documents sont confidentiels. Ma bdd de données est constituée de cette manière :  
TABLE utilisateurs CHAMPS uti_cle, uti_nom, uti_grp, uti_pass
TABLE groupe CHAMPS grp_cle, grp_lib, grp_admin, grp_vis, grp_dir... où grp_admin est égal à 1 si le groupe a le droit ou 0 si il n'a pas le droit
 
Donc chaque utilisateurs appartient à un groupe. Par exemple moi webmaster :  
TABLE utilisateurs : 1, DUPONT, 1, login
TABLE groupe : 1, administrateur, 1, 1, 0 car je n'ai pas le droit de voir des documents qui appartiennent à la direction.
 
J'aimerai savoir s'il est possible qu'un utilisateur appartiennent à 2 groupes???

Reply

Marsh Posté le 18-07-2006 à 16:31:33   

Reply

Marsh Posté le 18-07-2006 à 16:37:07    

T'as pas fait de MCD? [:pingouino] La structure de ta base doit être directement liée à tes règles de gestion et à la cardinalité des différents liens entre les tables.
En l'occurence, tu prends ici le problème à l'envers : tu crées la table en te demandant ensuite si telle règle est possible... :o


Message édité par soulmanto le 18-07-2006 à 16:38:06
Reply

Marsh Posté le 18-07-2006 à 16:37:43    

vu la structure actuelle des tables : non
si tu veux qu'un utilisateur appartienne à plusieurs groupe, il va faloir une troisiéme table.

Reply

Marsh Posté le 18-07-2006 à 16:39:19    

non car ma bdd est créée depuis longtemps... Je me pose cette question car plusieurs personnes me posent problème. C'est ensuite pour donner l'autorisation sur mes pages que je galère pas mal. Alors je me disais que si une personne pouvait appartenir à 2 groupes se serait bien!!!

Reply

Marsh Posté le 18-07-2006 à 16:39:44    

c'est quoi cette 3ème tables?

Reply

Marsh Posté le 18-07-2006 à 16:42:20    

C'est une association many to many (un utilisateur/groupe peut avoir plusieurs types de droits associés, et un type de droit est associé à plusieurs utilisateurs/groupes) donc il faut une table users/groups, une table de droits, et une 3e table (une table de liaison) créant le mapping entre les droits et les users/groups
 
Rebelotte si tu as une relation many to many entre les users et les groupes.
 
Et accessoirement, je vois pas trop l'intérêt de tes préfixes hein, quand tu as "uti_cle" ton préfixe ne sert à rien, c'est un champ de la table utilisateurs donc on se doute bien que ça référence un utilisateur et pas une pomme verte [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 18-07-2006 à 16:43:16    

simplement une table contenant chaque couple utilisateur/groupe ceci permettant de relier plusieurs utilisateurs au même groupe et un utilisateur à plusieurs groupes.
Mais bon, c'est une table qui n'existe pas (encore?) dans ton systéme.

Reply

Marsh Posté le 18-07-2006 à 16:45:54    

non cette table de liaison n'existe pas. Mais je ne comprends pas trop son utilisation... Elle serait de quelle forme et pouvez vous me donner un exemple avec mon premier message? C'est pas que je suis fénaiante mais je débute et là c'est un peu du charabia!!

Reply

Marsh Posté le 18-07-2006 à 16:49:10    

table LIEN :
------------
uti_cle
grp_cle
 
Pas plus compliqué que ça, en partant du principe que les deux champs sont des clés dans leurs tables respectives. Dans la table de lien, ils seront tous deux des clés étrangères.

Reply

Marsh Posté le 18-07-2006 à 16:54:57    

effectivement ce sont bien tous les deux des clés primaires dans leurs tables respectives.  
 
Par contre je ne comprends pas ce que je vais mettre dans cette table LIEN? 1, 1 alors moi utilisateur 1 j'appartient au groupe 1 administrateur. Si je veux appartenir au groupe 2 : direction, je fais quoi? 1,2?  
Et que devient mon champs uti_grp dans ma table UTILISATEURS?

Reply

Marsh Posté le 18-07-2006 à 16:54:57   

Reply

Marsh Posté le 18-07-2006 à 17:00:10    

Le champ deviendra obsolète... Il n'a pas lieu d'être, les clés étrangères étant déportées dans une table de lien quand on a une relation many to many. Tu peux le garder si par exemple tu veux utiliser des règles comportant des groupes primaires ou secondaires, ou alors le virer, à toi de voir. Pour remplir la table de lien, voici un exemple.
 
toi : utilisateur n°1
direction : groupe n°13
administrateurs : groupe n°2
 
Si tu appartiens au deux groupes, il te faudra insérer les valeurs
 
(1,1),
(1,2)
 
dans la table de liens C'est tout bête! ;)

Reply

Marsh Posté le 18-07-2006 à 17:06:04    

yes j'ai pigé... je peux donc associer un utilisateur à des groupes à l'infini...
 
C'est quoi cette relation "many to many" c'est quelque chose qu'il faut que je mette dans une requete. Par exemple pour savoir quels utilisateurs appartiennent au groupe 13 (direction) je dois faire comment?

Reply

Marsh Posté le 18-07-2006 à 17:11:44    

Regarde un tuto d'uml (sur developpez.com , &co) ca va t'expliquer tout ça :)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 18-07-2006 à 17:11:53    

La relation many to many, c'est un type de cardinalité qui spécifie que un utilisateur peut appartenir à plusieurs groupes, et que plusieurs utilisateurs peuvent faire partie d'un même groupe. C'est juste un concept, ça n'a rien à voir avec la requête en elle-même.
 
Pour ta sélection:
SELECT l.uti_cl,u.uti_nom
FROM liens l LEFT JOIN utilisateurs u ON u.uti_cle=l.uti_cle
WHERE l.grp_cle=13;

Reply

Marsh Posté le 18-07-2006 à 17:20:28    

ok je te remercie pour ton aide. Tes explications sont clairs ... Je vais essayer tout ça... Je te remercie car là tu m'as enlevé une bonne épine du pied!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed