Pour ce qui est des droits droit d'accès j'ai cette fonction
<?php
function VerifDroits($r_user, $r_page)
{
//calcul du décalage à appliquer sur la valeur binaire
$decalage = strlen(decbin($r_page))-1;
//décalge
$test_user = $r_user >> $decalage;
$test_page = $r_page >> $decalage;
//ET binaire
return $test_user & $test_page;
}
?>
Explications :
Les droits sont "stockés" dans une valeure binaire :
webmaster : 100 (4 en décimal)
membre : 010 (2 en décimal)
visiteur : 001 (1 en décimal)
Le premier bit (à droite) indique le droit d'accès aux page de catégorie visiteur (1:oui, 0:non), le deuxième aux pages des membres et le troisième celles du webmaster.
Le utilisateur sont stockés dans une base de donnée :
CREATE TABLE users (
login VARCHAR(100) NOT NULL,
pass CHAR(32) NOT NULL,
droits TINYINT UNSIGNED NOT NULL,
PRIMARY KEY(login)
);
le champ droit contient une valeur binaire (stockée en décimal) indiquant les droit de l'utilisateur.
exemples :
webmaster : 111 (7 en décimal)(un webmaster à un droit d'accès à toutes les pages)
membre :011 (3 en décimal)
visiteur : 001 (1 en décimal)
Exemples du fonctionnement de la fonction :
droits nécessaire pour accéder à la page : 10 (010)
droits de l'utilisateur : 011
//calcul du décalage à appliquer sur la valeur binaire
la longueur (2) - 1 = 1
décalage vers la droite
010 >> 1 = 001
011 >> 1 = 001
//ET binaire
001 & 001 = 1 --> la personne a les droits
exemple 2 :
droits nécessaire pour accéder à la page : 10 (010)
droits de l'utilisateur : 001
décalage vers la droite
010 >> 1 = 001
001 >> 1 = 000
//ET binaire
001 & 000 = 0 --> la personne n'a pas les droits
Remarque : les paramètres de la fonction sont passés en décimal.
Ensuite en haut de chaque page je place cette fonction
<?php
//$r_page : droits nécessaire pour accéder à la page (en décimal)
function SetSession($r_page)
{
session_start();
//si la variable contenant les droits n'est pas définie (personnes non logguée)
//on lui indique les droit d'un visiteur
if(!isset($_SESSION['droits']))
$_SESSION['droits'] = 1;
//si les droits ne sont pas corrects, redirection vers une page d'erreur
if(!VerifDroits($_SESSION['droits'], $r_page))
header("location: page_erreur.php");
}
?>
<?php
include_once("inc/config.inc.php");
include_once("inc/function.inc.php");
SetSession(1);
$db = mysql_connect("$host","$user","$pass");
mysql_select_db("$bdd", $db);
$req = mysql_query("SELECT * FROM users WHERE login='".$_POST['login']."' AND pass=MD5('".$_POST['password']."')") or die(mysql_error());
if(mysql_num_rows($req) == 0)
{
header("location: page_erreur.php");
}
else
{
$sortie = mysql_fetch_array($req);
$_SESSION['droits'] = $sortie['droits'];
$_SESSION['login'] = $sortie['login'];
header("location: page.php");
}
?>
En espérant que tout ce blabla puisse être utile à qqn
a++