Hello,
Voilà mon idée : Pour un site qui devra gérer un très grand nombre d'utilisateur, je souhaite mettre en place un système de groupes d'utilisateurs permettant ou non l'accès à divers modules de mon site.
Concrètement, je veux pouvoir dire que le module "Gestion des utilisateurs" doit être accessible au groupe "Modérateurs", groupe composé par exemple de Charles, Jean et Marc. Je veux pouvoir à volonté créer d'autres groupes, pouvoir placer chaque utilisateur de mon choix dans les groupes que je veux et définir quel groupe a accès à tel module.
Pour les droits pure, il n'est pas question de jouer avec quelquechose du style RWX, on se contente simplement de rattacher un groupe à un module, si le lien existe, alors le groupe a accès au module, sinon, pas d'accès. Bien entendu, un utilisateur peut appartenir à plusieurs groupes
Well, j'y réfléchis donc depuis plusieurs jours, et j'avoue bloquer un peu..
voilà où j'en suis, d'un point de vue Mysql :
Une table utilisateurs, tout ce qu'il y a de plus standard. Vous noterez qu'aucune référence au groupe n'existe.tbl_users
Commentaires sur la table: Table user, password, date de création et lien vers profile_
Champ Type Null Défaut Commentaires
user_id int(6) Oui NULL
user_login varchar(30) Oui NULL
user_password varchar(20) Oui NULL
user_creation_date datetime Oui NULL
user_modification_date datetime Oui NULL
user_desactivation_date datetime Oui NULL
user_mail varchar(60) Oui NULL
user_validation_code varchar(32) Oui NULL
user_activation int(1) Oui NULL
user_mod_id int(2) Oui NULL
user_nbr_consultations int(6) Oui NULL
Dans cette table, on ne fait que lister les groupes qui existent. Le contenu de cette table est appelé lorsque l'on veut lister les groupes existant.tbl_groupes
Commentaires sur la table: Creation / suppression des groupes d'utilisateurs
Champ Type Null Défaut Commentaires
groupe_id int(2) Oui NULL
groupe_name varchar(20) Oui NULL
groupe_commentaire varchar(300) Oui NULL
Après avoir listé nos groupes (voire table avant), on note ici quel user appartient à quel groupe. Je voulais partir avec des clefs étrangères, une qui renvoi vers l'user_id et l'autre le groupe_id correspondant. Ici, on sait que Charles appartient au groupe Modérateur.tbl_users_to_groupes
Commentaires sur la table: Table de rangement des users dans les groupes
Champ Type Null Défaut Commentaires
user_to_groupe_id int(8) Oui NULL
LIEN_user_id int(6) Oui NULL
LIEN_groupe_id int(2) Oui NULL
user_to_groupe_creationdate datetime Oui NULL
Ici, on déclare chaque module qui composera notre site. Je ne sais pas exactement comment je vais organiser ça, dans le principe, ça doit ressembler à ça.tbl_modules
Commentaires sur la table: correspondance entre l'adresse des scripts et les liens
Champ Type Null Défaut Commentaires
module_id int(2) Oui NULL
module_name varchar(30) Oui NULL
module_lien varchar(50) Oui NULL
module_commentaire varchar(50) Oui NULL
Celle là, c'est ma préférée.. On dit quel groupe a accès à quel module. Si la relation n'existe pas, le groupe n'a pas accès au module, point.tbl_modules_droits
Commentaires sur la table: quel groupe a le droit d'accéder à quoi
Champ Type Null Défaut Commentaires
module_droit_id int(3) Oui NULL
LIEN_module_droit_groupe_id int(2) Oui NULL
LIEN_module_droit_module_id int(2) Oui NULL
Toutes les tables sont en MyISAM, mais vu que nous sommes amenés à utiliser des clefs étrangères, il faut bien entendu modifier le moteur pour les tables qui en contiennent.
D'un point de vue PHP/SQL, au chargement d'une page, je voyais un bout de code qui allait d'abord lister tous les groupes ayant accès à ce module, ensuite une requête vérifiant que mon utilisateur (user_id en session) fait bien parti de l'un de ces groupes, si oui, je charge la page, sinon, bybye (si non, en fait le lien n'apparaitrait même pas).
Je n'ai pas été plus loin.
Je voudrais votre avis sur ce système, comment l'optimiser au niveau MySQL, quels sont vos conseils, comment auriez vous fait pour arriver au même point ? Voyez vous une autre solution plus simple pour en arriver au même résultat ?
Tout en gardant à l'esprit que j'aurai plein d'user à gérer. A noter aussi qu'on peut se passer de mettre un utilisateur dans plusieurs groupes, on peut simplement créer un groupe avec les droits précis que l'on veut et y coller notre user, de cette façon, on a un user par groupe et peut-être que c'est plus simple à gérer ? A voire.. J'attends vos avis, n'hésitez pas à poster vos exemples
merci !
Partager