Framework

Méthode Member::Check_auth()

Check_auth
Check_auth — Permet de contrôler les autorisations.


Description



Code PHP :
bool Check_auth(array $array_auth_groups, int $check_auth)


Cette méthode de la classe Member permet contrôler les autorisations de l'utilisateur pour une autorisation ($check_auth) donnée selon les règles fournies par le tableau $array_auth_groups.
Retourne true si autorisé, false le cas échéant.


Le tableau $array_auth_groups est automatiquement créé par la classe Groups lors de l'insertion dans la base de données. Il est donc récupéré à partir du Cache ou directement de la Base de données.

Une bonne façon de procéder pour passer le paramètre $check_auth est de définir des constantes avec un nom explicite contenant l'entier associé à chaque autorisation pour chaque droit (pour plus d'explication voir la classe Member). Dans les exemples suivants elles sont déclarées en hexadécimal mais on peut aussi bien les déclarer en décimal.
Lorsqu'on souhaite contrôler la propriété associée au ième droit il faut mettre à la variable $check_auth la valeur 2i-1 et non i pour des raisons techniques de calcul des autorisations. Ainsi pour utiliser le 3ème bit $check_auth doit valoir 4 (23-1 = 22 = 4).
On peut aussi voir les choses autrement et plus simplement. L'entier correspondant à la première opération est toujours 1. Ensuite dès que l'on rajoute une autorisation on lui associe l'entier précédent multiplié par 2.



Exemple 1



Code PHP :
<?php 
 
//Définition des constantes.
define('READ_CAT_FORUM', 0x01); //Premier bit donc 1 en binaire et 1 en décimal et 0x01 en hexadécimal
define('WRITE_CAT_FORUM', 0x02); //Deuxième bit donc 10 en binaire, soit 2 ou 0x02
define('EDIT_CAT_FORUM', 0x04);//Troisième bit donc 100 en binaire et 4 en décimal et en hexadécimal
 
$array_auth_groups = array (
  'r-1' => 1,
  'r0' => 3,
  'r1' => 7,
  'r2' => 7,
);
 
if( $Member->Check_auth($array_auth_groups, WRITE_CAT_FORUM) )
echo 'Vous êtes autorisé à poster dans cette catégorie';
else
echo 'Vous ne pouvez pas poster!';
 
?>


L'exemple ci-dessus va afficher "Vous êtes autorisé à poster dans cette catégorie" si le niveau d'autorisation (contenu dans la variable
$Member->Get_attribute('level')
) est supérieur ou égal à 0 (c'est à dire les membres, modérateurs et administrateur).


Exemple 2, avec des groupes



Code PHP :
<?php 
 
//Définition des constantes.
define('READ_CAT_FORUM', 0x01);
define('WRITE_CAT_FORUM', 0x02);
define('EDIT_CAT_FORUM', 0x04);
 
$array_auth_groups = array (
  'r-1' => 1,
  'r0' => 3,
  'r1' => 7,
  'r2' => 7,
  '1' => 7,
);
 
if( $Member->Check_auth($array_auth_groups, WRITE_CAT_FORUM) )
echo 'Vous êtes autorisé à poster dans cette catégorie';
else
echo 'Vous ne pouvez pas poster!';
 
?>


L'exemple ci-dessus va afficher "Vous êtes autorisé à poster dans cette catégorie" si le niveau d'autorisation (contenu dans la variable
$Member->Get_attribute('level')
est supérieur ou égal à 0 (c'est à dire les membres, modérateurs et administrateur), ou si vous appartenez au groupe avec l'identifiant 1.



Exemple 3, opérateur de décalage de bit



Code PHP :
<?php 
 
$all_auth = true;
for($i = 0; $i < 4; $i <<= 1)
{
$all_auth = $Member->Check_auth($array_auth_groups, $i);
if( $all_auth === false )
break;
}
 
if( $all_auth === true )
echo 'Vous bénéficiez de toutes les autorisations';
else
echo 'Vous ne bénéficiez pas de toutes les autorisations';
?>


L'opérateur << de décalage de bit de PHP peut-être utilisé pour faciliter la manipulation des droits. Cet exemple permet de balayer plusieurs droits (ici 4) successivement.



Voir aussi



Check_level(), Check_max_value(), Get_attribute()
Cette page a été vue 2149 fois