Page 1 sur 1

Afficher données suivant les permissions

Posté : 17 mars 2014, 16:27
par marcetienne
Bonjour à tous.

J'ai un formulaire html pour ajouter des informations en bases de données concernant l'un ou l'autre des utilisateurs.

L'un de mes champs sert à selectionner l'utilisateur en question, et pour cela j'utilise php qui me donne toute la liste des utilisateurs présent dans ma base COMPTES.

J'ai besoin que suivant la personne qui s'est connecté à ce formulaire (j'ai pour cela une connexion sur ma page index qui fonctionne), la liste des utilisateurs possible dans le champ du formulaire en question soit réduite aux seuls utilisateurs que je lui autorise (différent suivant les personnes, car il s'agit d'attribuer des RDV à mes employés, et certains peuvent en attribuer à d'autres, d'autres non, etc...)

J'ai pensé à faire des groupes, mais il y a tellement de combinaisons possibles que ma table serait énorme à mon avis.

Du coup, j'ai créé une table PERMISSIONS avec la liste des utilisateurs en colonnes ET en lignes.

Ainsi, je mets 1 ou 0 dans chaque case suivant les droits.

Voici un exemple de contenu de ma base de donnée, table permissions :

Identifiant Paul Pierre Jacques

Paul 1 0 1

Pierre 0 1 1

Jacques 1 0 1

Mon problème c'est maintenant que faire avec ça ? j'ai essayé dans tous les sens, j'arrive à afficher les valeurs 1 ou 0 de chaque utilisateur, mais comment faire quelque chose du style "afficher uniquement la liste des utilisateurs que Paul à l'autorisation de modifier ?"
Je voudrais vraiment pouvoir travailler avec ce type de base, car une simple base permission avec une ligne par permission sera trop énorme !

Merci pour votre aide !

Re: Afficher données suivant les permissions

Posté : 17 mars 2014, 19:05
par damien_55
Hello,

Stocker les permissions dans des variables de sessions quand l'utilisateur se connecte et inclure cette variable lors de tes demandes.

Re: Afficher données suivant les permissions

Posté : 17 mars 2014, 19:42
par moogli
salut,

erreur monumentale, c'est un gros défaut de conception.

tu n'étais pas loin avec la constitution de groupe.

sur le principe il te faut une auto jointure sur tes utilisateurs.
2014-03-17_183144.png
cela te fait une table de ce style
CREATE TABLE Utilisateur(
        userid int (11) Auto_increment  NOT NULL ,
        nom    Varchar (25) NOT NULL ,
        prenom Varchar (25) NOT NULL ,
        PRIMARY KEY (userid )
)ENGINE=InnoDB;


CREATE TABLE Prendre_RdV(
        userid             Int NOT NULL ,
        userid_Utilisateur Int NOT NULL ,
        PRIMARY KEY (userid ,userid_Utilisateur )
)ENGINE=InnoDB;

ALTER TABLE Prendre_RdV ADD CONSTRAINT FK_Prendre_RdV_userid FOREIGN KEY (userid) REFERENCES Utilisateur(userid);
ALTER TABLE Prendre_RdV ADD CONSTRAINT FK_Prendre_RdV_userid_Utilisateur FOREIGN KEY (userid_Utilisateur) REFERENCES Utilisateur(userid);
tu peux donner des nom plus parlant.
dans la table Prendre_RdV la première colonne est l'id de celui qui prend les rendez-vous et la seconde l'id de celui pour quoi il prend les rendez-vous.

du coup pour afficher la combo c'est simple
SELECT u.userid
      ,u.nom
      ,u.prenom
FROM   prendre_rdv as prdv
JOIN   utilisateur as u
ON     prdv.userid_utilisateur = u.userid
WHERE  prdv.userid = 412
Où 412 est l'id de la personne connectée (que tu doit avoir en session je pense).
Le jeux de résultat est la liste des gens que la personne connectée peux "manager".
du coup tu met l'id en value de l'option et nom - prénom dans la balise (<option value="id"> nom - prénom</option>

la taille de la table prendre_rdv importe peu un sgbd c'est fait pour cela (bon si tu as 10 millions de tuples dedans on peu en reparler mais pour cela il y a des caches coté sgbd et coté client, comme par exemple garder en session ces information et ne faire la requête qu'une fois, en partant du principe qu'il n'y auras pas de modification).

@+

Re: Afficher données suivant les permissions

Posté : 19 mars 2014, 16:41
par marc-etienne
Bonjour, et merci beaucoup pour ta réponse.

Je ne suis pas sur d'avoir tout suivi, mais si j'ai bien compris, après tout ça, je dois créer une ligne pour chaque droit.
Par exemple, si toto (id 10) peut attribuer des RDV à paul (11) pierre(12) jean(13), je dois avoir
USERID 10 USERID_utilisateur 11
USERID 10 USERID_utilisateur 12
USERID 10 USERID_utilisateur 13

C'est bien ça ?