Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1615 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] - Question multi-admin

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] - Question multi-admin

n°770012
AlphaZone
Posté le 19-06-2004 à 19:20:04  profilanswer
 

Bonjours à tous,
 
Voila je me posais une question:
 
Comment faire pour une gestion multi-utilisateur dans une parti d'administration ?
 
Comment savoir que telle personne à tel niveau et que celle-co ne peux frauder pour accèder à un niveau supérieur ?
 
Sur quoi basez-vous pour la sécurité des niveaux ?
 
De mon côté j'ai utilisé un niveau décimal. ex: superadmin = 10, newser = 1, etc...
Et je me suis basé sur le pseudo.
Donc si Niveau = XX et pseudo = TOTO alors afficher tel page.
 
Qu'en pensez-vous ?

mood
Publicité
Posté le 19-06-2004 à 19:20:04  profilanswer
 

n°770040
esox_ch
Posté le 19-06-2004 à 20:54:17  profilanswer
 

Moi pour mon forum j'ai fais une table "Permissions". Ou il y a le login de la personne et tout les pouvoirs k'elle peut avoir (deplacer posts,editer,supprimer,bloker,...) et avant de faire koi ke se soit, je controle dans cette table si tout est bon

n°770090
AlphaZone
Posté le 19-06-2004 à 22:54:51  profilanswer
 

esox_ch a écrit :

Moi pour mon forum j'ai fais une table "Permissions". Ou il y a le login de la personne et tout les pouvoirs k'elle peut avoir (deplacer posts,editer,supprimer,bloker,...) et avant de faire koi ke se soit, je controle dans cette table si tout est bon


 
Ah oui tiens je n'y avais pas penser.
 
Par contre, au niveau de l'algoritme c'est un peu flou, c'est possible d'avoir un peu plus de précision sur ta méthode ?

n°770172
esox_ch
Posté le 20-06-2004 à 09:53:46  profilanswer
 

Y a pas vraiment un algorithme. J'ai une table ou chak colone est un "pouvoir" different.Je met touit simplemtent "n" si l'utilisatewur n'a pas le pouvoir et "y" s'il l'a. Apres sur la page d'admin je fais un truc genre :
 

Code :
  1. if($mysqlarray['bannir'] == "y" )
  2. echo "<input type=\"text\" value=\"Bannir\">";


.....
C'est long et chiant de faire la page d'admin pask si comme moi tu as une 20ène de pouvoirs differents ... ca te fais une 20ène de if(..){..} a taper, mais apres je trouve que ca donne style ... tu peux donner les pouvoirs comme tu veux et les enlever aussi

n°770216
AlphaZone
Posté le 20-06-2004 à 11:48:31  profilanswer
 

esox_ch a écrit :

Y a pas vraiment un algorithme. J'ai une table ou chak colone est un "pouvoir" different.Je met touit simplemtent "n" si l'utilisatewur n'a pas le pouvoir et "y" s'il l'a. Apres sur la page d'admin je fais un truc genre :
 

Code :
  1. if($mysqlarray['bannir'] == "y" )
  2. echo "<input type=\"text\" value=\"Bannir\">";


.....
C'est long et chiant de faire la page d'admin pask si comme moi tu as une 20ène de pouvoirs differents ... ca te fais une 20ène de if(..){..} a taper, mais apres je trouve que ca donne style ... tu peux donner les pouvoirs comme tu veux et les enlever aussi


 
Avis personnel:
Tu devrais utiliser un booléun, ca devrait faciliter la vie, je pense

n°770520
esox_ch
Posté le 20-06-2004 à 21:57:04  profilanswer
 

A tiens j'y avais pas pensser ... c vrai que c pas con ... Merci :D

n°771306
AlphaZone
Posté le 21-06-2004 à 13:18:39  profilanswer
 

Bon on se la commence quand cette partie admin ? loool

n°771311
SatanKoRn
J'T'A'M !
Posté le 21-06-2004 à 13:23:06  profilanswer
 

Partie admin pour un forum ou pour autre chose ?


---------------
Matt
n°771438
AlphaZone
Posté le 21-06-2004 à 14:40:50  profilanswer
 

pour une section avec divers menu (ajout news, ajout lien telechargement, ajout lien site etc....)

n°771587
esox_ch
Posté le 21-06-2004 à 16:34:19  profilanswer
 

Si tu veux on peux la scripter a 4 mains mais fo attendre la fin de la semaine, pask moi la je suis en pleins exams :p

mood
Publicité
Posté le 21-06-2004 à 16:34:19  profilanswer
 

n°772606
aspegic500​mg
Posté le 22-06-2004 à 13:10:11  profilanswer
 

J'ai 5 tables, une avec les utilisateurs (id,nom), une avec les groupes (id,nom), une avec les actions possibles dans le site(id,nom), une avec les appartenances aux groupes (idGroupe,idUtilisateur), une avec les droits des groupes pour les actions (idGroupe, idAction)
 
Je peux attribuer à n'importe quel groupe les droits sur autant d'actions que je veux, et je peux faire joindre un utilisateur à autant de groupes que je veux et ainsi lui donner les droits des groupes où il se trouve, c'est super pratique à gérer (exemple: des groupes "élèves","profs","administration","webadmin","webmaster"...)
Dans mon code j'ai juste à faire par exemple:

Code :
  1. if(autorisationAcces('Ajouter une note')
  2. {
  3.    //ici le code qu'on veut bien executer pour l'utilisateur ayant les droits
  4. }


 
Ca rends les autorisations très claires dans le code et facile à mettre :)
(j'ai fais toute la partie admin qui va avec les tables bien sûr ;) )
 
Bientôt je vais rajouter la possibilité de retirer ou d'ajouter un droit précis à un utilisateur précis, ce droit sera prioritaire sur les droits donnés par son appartenance aux différents groupes dont il fait parti

n°784181
AlphaZone
Posté le 01-07-2004 à 23:03:31  profilanswer
 

Ca m'a l'air compliqué quand même Aspegic
 
Avec toutes ces tables, je m'y perd.

n°784189
jagstang
Pa Capona ಠ_ಠ
Posté le 01-07-2004 à 23:10:16  profilanswer
 

j'ai mis au point une façon intéressante de faire. pour affiner au mieux les droits. chaque droit correspond à une puissance de 2. ainsi, en additionnant les droits, on stock dans un seul nombre tous ses droits.
 
ex.
 
poster : 1
editer : 2
effacer : 4
admin : 8
 
pour contrôler si la personne à les droits, une fonction  
 

Code :
  1. function checkLevel($droit,$minLevel)
  2.         {
  3.         if (session_is_registered("login" ))                                // contrôle si loggué, quel que soit le niveau
  4.             if ($droit >= $minLevel)                // et son niveau
  5.                         return ;
  6.                                
  7.         redirection("logout.php" ) ;                                               
  8.         }
  9.        
  10. function testDroit($droit, $nbr)
  11.   {
  12.   $nbr =  $nbr >> $droit ; //décalage de bit à droite x fois la variable $droit
  13.  
  14.   return $nbr & 1 ; // un & logique afin de laisser retourné 1 si vrai ou 0 si faux
  15.   }

Message cité 1 fois
Message édité par jagstang le 02-07-2004 à 13:40:05

---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°784306
aspegic500​mg
Posté le 02-07-2004 à 09:09:28  profilanswer
 

AlphaZone a écrit :

Ca m'a l'air compliqué quand même Aspegic
 
Avec toutes ces tables, je m'y perd.


 
Le système est relativement long (mais pas si compliqué que ca) à créer mais aprés la gestion des droits est hyper simple pour l'utilisateur et peut être affinée à l'extrème, et pour moi rajouter des controles dans le code est mechamment simple et rapide ;)  
 
 
J'ai déjà fait d'autres systèmes d'authentification auparavant:
-simple login "admin" permettant d'avoir accés aux modifications (là c'est admin ou user, pas facile de donner des droits précis :/ )
-droits gérés par un level (quand on veut donner à 2 utilisateurs chacun le droit sur une partie mais pas sur l'autre, c'est baisé...)
 
Ils montrent trés vite leur limite alors j'ai fait mon nouveau et franchement il est terrible (je pense encore l'améliorer en donnant la possibilité de retirer un droit précis à un utilisateur, en dehors des droits donnés par ses appartenances aux groupes)

n°784322
esox_ch
Posté le 02-07-2004 à 09:39:26  profilanswer
 

Je crois que je préfère quand meme le mien ...

n°784739
aspegic500​mg
Posté le 02-07-2004 à 12:46:23  profilanswer
 

esox_ch a écrit :

Je crois que je préfère quand meme le mien ...


 
Comme tu veux, mais quand tu aura un site avec 200 pouvoirs différents à mettre: du simple accés à chaque rubrique, aux actions telles que voir,ajouter,supprimer,modifier quelque chose, x 20 pages ca fait vite un nombre énorme de colonnes, le système finit donc par être limité (y'a une limitation aux nombre max de colonnes dans les sgbd)
Tu n'a pas de gestion de groupes (mais ca peut se rajouter sans trop de problème)
 
Mon système finalement c'est un principe assez proche, sauf qu'au lieu de faire 1 ligne par user avec autant de colonnes qu'il y'a de droits possibles, je fais une table avec une ligne pour chaque association user/droit. (et pour le système de groupe j'ai une table avec une ligne pour chaque association user/groupe)
 
As-tu déjà eu des cours sur la modélisation de bases de données :heink:

n°785636
AlphaZone
Posté le 03-07-2004 à 12:57:34  profilanswer
 

Aspegic a raison.
 
Et puis plus la chose est long a coder, plus l'accès est simple.

n°802771
esox_ch
Posté le 22-07-2004 à 09:41:09  profilanswer
 

aspegic500mg a écrit :


As-tu déjà eu des cours sur la modélisation de bases de données :heink:


 
Non j'ai jamais eu de cours d'info de ma vie, tout ce que je sais je l'ai appris soit sur le net soit dans mes bouquins..  
 
Le problème c'est que j'aime pas trop la gestion des pouvoirs "groupe par groupe", j'aime bien pouvoir donner n'importe quel pouvoir (et j'en ai un tas possible) à n'importe quel utilisateur ...  
Mon systeme peut etre un peu "simplifié" en separant les données sur plusieurs tables (genre au lieu de mettre le nom de l'utilisateur, mettre l'id correpondant a son nom dans la table des utilisateurs ,...) mais je vois mal comment je peux changer plus ...

n°802775
Profil sup​primé
Posté le 22-07-2004 à 09:47:17  answer
 

:hello:
 
Pour empécher mes divers users de s'effacer les articles écrits entre eux, j'ai mis un bete WHERE :
 

Code :
  1. SELECT article, pseudo FROM article WHERE pseudo='$_SESSION[pseudo]'


 
Bien sur çà marche mais comme je debute avec les sessions, je vais surement trouver mieux ;)
 
Mais est-ce que vous trouvez ma méthode correct  ? :jap:

n°802778
esox_ch
Posté le 22-07-2004 à 09:51:40  profilanswer
 

Moi j'aurais plutot vu un :
 
SELECT pseudo FROM article WHERE id='$article_id'
 
$farray = mysql_fetch_array($query);
if($_SESSION['pseudo'] == $farray['pseudo'])
 delete();
else
 die("Vous ne pouvez pas effacer des topic créés par d'autres utilisateurs" );


Message édité par esox_ch le 22-07-2004 à 09:52:18
n°1781453
infodeb
Posté le 02-09-2008 à 15:23:21  profilanswer
 

jagstang a écrit :


pour contrôler si la personne à les droits, une fonction  
 

Code :
  1. function checkLevel($droit,$minLevel)
  2.         {
  3.         if (session_is_registered("login" ))                                // contrôle si loggué, quel que soit le niveau
  4.             if ($droit >= $minLevel)                // et son niveau
  5.                         return ;
  6.                                
  7.         redirection("logout.php" ) ;                                               
  8.         }
  9.        
  10. function testDroit($droit, $nbr)
  11.   {
  12.   $nbr =  $nbr >> $droit ; //décalage de bit à droite x fois la variable $droit
  13.  
  14.   return $nbr & 1 ; // un & logique afin de laisser retourné 1 si vrai ou 0 si faux
  15.   }



 
Bonjour,
 
Pouvez-vous mettre un exemple complet d'application de votre méthode ?
 
D'avance merci.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] - Question multi-admin

 

Sujets relatifs
Petite question Javascript/HTML[PHP/MySQL] - Remise à zero par rapport à une date
Recrutement de quelqu'un qui est bon en PHPPHP probleme easyphp et mysql_fetch_array
[PHP] Comment utiliser le résultat d'une requete sans rechargerpetite question doxygen
[php] erreur sqlPtite question
Php & Mysql ou Php et fichier textePHP/FPDF et formatage d'un mail auto
Plus de sujets relatifs à : [PHP] - Question multi-admin


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR