Authentification & droits d'accès - Composer & Packagist

Master Internet, Données et Connaissances

Jean-Marc Lecarpentier

Enseignement des technologies du Web

 

Authentification & droits d'accès - Composer & Packagist

Plan du cours

  • Sessions PHP
  • Authentification par login et mot de passe
  • Gestion des droits sur un site
  • Modèles de droits : ACL, RBAC
  • Singleton vs. Injection de dépendance
  • OpenId, OAuth : authentification via un tiers
  • Outils de développement : Composer & Packagist

Notes de cours

Travail personnel

Authentification des utilisateurs et gestion des droits

En partant de l'architecture du site des poèmes du TP précédent, ajouter le possibilité de se connecter sur le site.

Attention l'exercice n'est pas de gérer les utilisateurs (saisie, etc). On utilisera simplement un tableau PHP pour stocker quelques utilisateurs, par exemple 

<?php
$users 
= array(
    
'jml' => array(
        
'id' => 12,
        
'nom' => 'Lecarpentier',
        
'prenom' => 'Jean-Marc',
        
'mdp' => 'toto',
        
'statut' => 'admin'
    
),
    
'alex' => array(
        
'id' => 5,
        
'nom' => 'Niveau',
        
'prenom' => 'Alexandre',
        
'mdp' => 'toto',
        
'statut' => 'admin'
    
),
    
'julia' => array(
        
'id' => 12,
        
'nom' => 'Dupont',
        
'prenom' => 'Julia',
        
'mdp' => 'toto',
        
'statut' => 'redacteur'
    
)
);
?>

Étapes de réalisation

  • Compléter la classe Request pour que celle-ci gère les données provenant de session et enregistre les données dans $_SESSION.
  • Créer une classe AutenticationManager qui gère la vérification du login/pwd entré par un utilisateur et la mise en session de informations de l'utilisateur connecté. Elle a besoin d'une exception spécifique et d'un afficheur.
  • Compléter le FrontController pour que celui-ci intercepte toute action qui correspond à une connexion (i.e. la présence de données POST de login/mot de passe) et traite alors la demande. On pourra commencer avec un couplage fort en instanciant « en dur », dans le FrontController, la classe AutenticationManager et en la passant en paramètre au constructeur des contrôleurs de classe.
  • Créer une classe AccessManager qui gère les autorisations d'accès. Par exemple, on pourra mettre un ou deux poèmes en accès restreint aux utilisateurs connectés.
  • Améliorer le système pour utiliser un conteneur de services qui sera alors utilisable par tout contrôleur de classe.

Indication complémentaire

La connexion au site se fait en revenant sur la même page, évitant ainsi d'être renvoyé vers une page spécifique, ce qui obligerait ensuite l'utilisateur à revenir à la page initiale. Pour ce faire, le formulaire de connexion doit envoyer vers l'URL utilisé, tout en conservant les variables éventuellement présentes aussi dans l'URL (action demandée par exemple). On peut réaliser cela en utilisant le tableau superglobal $_SERVER, et en particulier $_SERVER['REQUEST_URI'].
Par exemple, si l'URL est http://toto.com/pages/index.php?a=clients&client=jml, alors $_SERVER['REQUEST_URI'] contiendra /pages/index.php?a=clients&client=jml.

Attention : penser à utiliser la classe Request qui encapsule $_SERVER

Réfléchir à la façon dont le gestionnaire d'authentification peut être découplé de la méthode d'authentification. On pourra par exemple créer une classe par type de vérification, en commençant par le type login/mot de passe stocké dans un tableau(le système qui existe déjà dans le site), puis en imaginant comment les stocker dans d'autres systèmes (fichier, bdd, etc.).

Composer

Reprendre l'application des poèmes et y ajouter un dossier vendor/.

Utiliser composer pour y ajouter le gestionnaire de templates Twig. On pourra aussi tester le gestionnaire de logs Monolog et Swiftmailer pour envoyer des emails.

Important : il faudrait en théorie avoir un accès ssh sur le serveur web pour utiliser Composer. Pour contourner cette limitation, on peut travailler localement sur les machines de TP Linux sur lesquelles Composer est installé. Il faut alors copier le projet sur la machine de TP ou bien connecter le serveur en sFTP. On pourra alors utiliser composer en ligne de commande et ensuite mettre le dossier vendor sur le serveur. Puisque les chemins générés poyr l'autoload sont relatifs, l'ensemble fonctionne.

Twig

Modifier la gestion du layout et des vues de l'application pour utiliser le gestionnaire de templates Twig.

Pour commencer, la classe View utilisée jusqu'à présent est donc à revoir, et il faut lancer le moteur de templates. Ce tutoriel indique comment démarrer.
Attention il faut bien penser à préciser au Twig_Environment que l'on est en mode debug sinon les templates sont mis en cache (pas pratique pour modifier les templates et tester !)

Ensuite, l'intérêt principal sera de mettre en oeuvre l'héritage de templates.