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
- Authentification et droits dans un site
- Sessions
- Authentification
- Modèles de droits
- Implémentation et Injection de dépendance
- Conteneur de dépendances
- OpenId, OAuth : authentification via un tiers
- OpenId
- Oauth
- Providers
- Quels services ?
- Composer & Packagist : gérer les dépendances
- Problématique des dépendances
- Composer
- Packagist
- Exemples
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.