Classe Member

Introduction



La classe User gère le membre au cours de sa session. Elle permet notamment de récupérer ses informations et gérer les autorisations pour les niveaux et groupes d'utilisateurs, sachant qu'elle supporte le fait qu'un utilisateur soit inscrit dans plusieurs groupes.


Informations du membre



Les informations du membre sont accéssibles grâce à la fonction Get_attribute()
Vous pouvez récupérer les informations suivante:

Code PHP :
$User->Get_attribute('user_id') //Id de l'utilisateur, -1 si invité
$User->Get_attribute('login') //Pseudo de l'utilisateur, Invité si invité
$User->Get_attribute('level') //Niveau d'autorisation de l'utilisateur, -1 si invité
$User->Get_attribute('user_groups') //Groupes de l'utilisateur, séparés par des |
$User->Get_attribute('user_lang') //Langue de l'utilisateur
$User->Get_attribute('user_theme') //Thème de l'utilisateur
$User->Get_attribute('user_mail') //Mail de l'utilisateur
$User->Get_attribute('user_pm') //Nombre de messages privés de l'utilisateur
$User->Get_attribute('user_readonly') //Utilisateur en lecture seule?
$User->Get_attribute('user_editor') //Editeur texte de l'utilisateur
$User->Get_attribute('user_timezone') //Zone horaire de l'utilisateur (GMT)



Gestion des autorisations



Autorisations simple sur les rangs



Un utilisateur a un rang qui lui est assigné, qui peut aller de visiteur à administrateur. Ainsi il est possible de définir des autorisations sur les rangs.
Pour cela consultez la méthode Check_level()


Autorisations sur les groupes



La gestion des groupes est à la base de la puissance du système d'autorisation sur PHPBoost. Vous pouvez donner des droits en plus des rangs, à des utilisateurs d'un groupe, et même membre par membre.

La gestion des autorisations est basée sur les opérateurs de bits. Sachant que la majorité des serveurs fonctionnent sur des architectures 32 bits (bien que les architectures 64 bits commencent à se démocratiser) nous pourrons gérer 32 types d'autorisations en une seule variable (il est fortement recommandé de ne pas dépasser ce nombre pour ne pas avoir des dépassements de capacité sur les architectures 32 bits).

En réalité en PHP nous n'avons pas la maîtrise totale des types et donc les entiers sont forcément signés (c'est-à-dire qu'ils peuvent être négatifs ou positifs) et donc le bit de poids fort (le plus à gauche) est utilisé pour savoir le signe du nombre. Sur une architecture 32 bits nous pourrons effectivement gérer que 31 autorisations par variable.

Dans les cas où on souhaite gérer plus de 31 autorisations (très très rare) il faudra gérer les droits en plusieurs variables.


Stockage des règles pour chaque action



Commençons par un schéma représentant la façon dont un ordinateur stocke des nombres (l'exemple est pris en architecture 32 bits).



Comme nous l'avons vu nous pouvons traiter les autorisations par séries de 31. Chaque règle (de 1 à 31) est repérée par son numéro et correspond au bit qui est à 1 si l'action est permise ou 0 sinon. Voici un schéma illustrant comment sont stockées les autorisations de chaque utilisateur.



La variable qui contient les règles est un tableau associatif qui à chaque rang ou groupe associe un entier contenant les autorisations pour chaque action.
Pour construire un tableau d'autorisations utilisez la méthode Return_array_auth() de la classe Groups.
En pratique ce tableau est stocké dans la base de données. Un problème se pose alors : comment stocker un tableau dans la base de données ? Nous vous conseillons de sérialiser votre tableau (le transformer en chaîne de caractères) à l'aide de la fonction serialize() et lors de l'utilisation de reconvertir cette chaîne vers le tableau d'origine avec unserialize(). Pour en savoir plus sur les subtilités à propos du stockage de ce tableau dans la base de données merci de vous reporter à cet article.


Permission d'un utilisateur pour une action donnée



Une fois le tableau construit il sera utilisé pour déterminer les autorisations du membre. Pour cela il faudra utiliser la méthode Member::Check_auth() qui détermine si l'utilisateur concerné a accès à l'action demandée.


Utilisation dans un module



Il faut savoir que la classe groups est déjà instanciée dans includes/begin.php donc lorsque vous travaillez sur un module un objet de ce type existe déjà et se nomme $groups.
Vous n'aurez alors qu'à l'utiliser pour gérer vos autorisations.


Méthodes disponibles