[PHP] - Question multi-admin

- Question multi-admin [PHP] - PHP - Programmation

Marsh Posté le 19-06-2004 à 19:20:04    

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 ?

Reply

Marsh Posté le 19-06-2004 à 19:20:04   

Reply

Marsh Posté le 19-06-2004 à 20:54:17    

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

Reply

Marsh Posté le 19-06-2004 à 22:54:51    

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 ?

Reply

Marsh Posté le 20-06-2004 à 09:53:46    

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

Reply

Marsh Posté le 20-06-2004 à 11:48:31    

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

Reply

Marsh Posté le 20-06-2004 à 21:57:04    

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

Reply

Marsh Posté le 21-06-2004 à 13:18:39    

Bon on se la commence quand cette partie admin ? loool

Reply

Marsh Posté le 21-06-2004 à 13:23:06    

Partie admin pour un forum ou pour autre chose ?


---------------
Matt
Reply

Marsh Posté le 21-06-2004 à 14:40:50    

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

Reply

Marsh Posté le 21-06-2004 à 16:34:19    

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

Reply

Marsh Posté le 21-06-2004 à 16:34:19   

Reply

Marsh Posté le 22-06-2004 à 13:10:11    

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

Reply

Marsh Posté le 01-07-2004 à 23:03:31    

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

Reply

Marsh Posté le 01-07-2004 à 23:10:16    

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?  
Reply

Marsh Posté le 02-07-2004 à 09:09:28    

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)

Reply

Marsh Posté le 02-07-2004 à 09:39:26    

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

Reply

Marsh Posté le 02-07-2004 à 12:46:23    

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:

Reply

Marsh Posté le 03-07-2004 à 12:57:34    

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

Reply

Marsh Posté le 22-07-2004 à 09:41:09    

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 ...

Reply

Marsh Posté le 22-07-2004 à 09:47:17    

: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:

Reply

Marsh Posté le 22-07-2004 à 09:51:40    

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
Reply

Marsh Posté le 02-09-2008 à 15:23:21    

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.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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