Authentification et Autorisation

Avant que nous n'implémentions la gestion des utilisateurs, nous devons activer les modules authentification et autorisation.

Nous ajoutons deux nouveaux modules à notre fichier de configuration de l'application.

...modules TDataSourceConfig et TActiveRecordConfig ...

Le module TAuthManager gère le processus d'authentification et d'autorisation. Il utilise le module users comme gestionnaire d'utilisateur (voir ci-après). En spécifiant la propriété LoginPage, nous indiquons au module d'authentification de rediriger vers la page LoginUser quand il est nécessaire de s'authentifier. Nous décrirons comment créer la page LoginUser ci-après.

Le module user est une classe de type TDbUserManager qui est responsable de la vérification et de la validation des utilisateurs et qui enregistre dans une session PHP les données utilisateurs. La propriété UserClass est initialisée comme étant de type Application.BlogUser, ceci indique au module user de chercher une classe BlogUser dans le dossier protected (rappellez-vous que l'alias Application fait référence au dossier protected) et d'utiliser cette classe pour conserver les données utilisateurs dans une session. Le module user est une classe de type TDbUserManager qui est responsable de la vérification et de la validation des utilisateurs et qui enregistre dans une session PHP les données utilisateurs. La propriété UserClass est initialisée comme étant de type Application.BlogUser, ceci indique au module user de chercher une classe BlogUser dans le dossier protected (rappellez-vous que l'alias Application fait référence au dossier protected) et d'utilisez cette classe pour conserver les données utilisateurs dans une session.

Comme vous pourrez le constater dans les sections suivantes, dans les différents contrôles et pages, nous pourrons utiliser $this->User pour accéder à l'objet qui contient les informations de l'utilisateur actuellement connecté.

Ci-dessous les détails de l'implémentation de la classe BlogUser. Remarquez que les Active Record sont utilisés pour exécuter une requête. Par exemple, nous utilisons UserRecord::finder()->findByPk($username) pour chercher la valeur de $username dans la table users et ceci par la clé primaire.

// Include TDbUserManager.php file which defines TDbUser Prado::using('System.Security.TDbUserManager'); /** * La classe BlogUser. * BlogUser représente les données utilisateurs à conserver en session. * L'implémentation par défaut conserve le nom et le rôle de l'utilisateur. */ class BlogUser extends TDbUser { /** * Créer un objet de type BlogUser basé sur le nom de l'utilisateur. * Cette méthode est requise par TDbUser. Cet objet vérifie si l'utilisateur * est bien présent en base de données. Si oui, un objet BlogUser * est créé et initialisé. * @param string le nom de l'utilisateur * @return l'objet BlogUser, null si le nom de l'utilisateur est invalide. */ public function createUser($username) { // utilise l'Active Record UserRecord pour chercher l'utilisateur username $userRecord=UserRecord::finder()->findByPk($username); if($userRecord instanceof UserRecord) // si trouvé { $user=new BlogUser($this->Manager); $user->Name=$username; // enregistre le nom de l'utilisateur $user->Roles=($userRecord->role==1?'admin':'user'); // et son rôle $user->IsGuest=false; // l'utilisateur n'est pas un invité return $user; } else return null; } /** * Vérifie que le nom d'utilisateur et son mot de passe sont correct. * Cette méthode est requise par TDbUser. * @param string le nom de l'utilisateur * @param string le mot de passe * @return boolean en fonction de la validité de la vérification. */ public function validateUser($username,$password) { // utilise l'Active Record UserRecord pour vérifier le nom d'utilisateur couplé au mot de passe. return UserRecord::finder()->findBy_username_AND_password($username,$password)!==null; } /** * @return boolean indiquant si l'utilisateur est un administrateur. */ public function getIsAdmin() { return $this->isInRole('admin'); } }