Symfony et les sessions

Je vais pas vous le cacher, y’a une méthode simple, une méthode intermédiaire et une méthode compliquée de faire ça avec Symfony.

Nous, ici, on va faire la manière intermédiaire.

La méthode compliquée serait de tout taper à la main et la méthode simple serait d’installer un Bundle tout fait.

Pourquoi présenter une méthode intermédiaire dans ce post ?

Parce que comme ça on va pas se faire chier à tout retaper MAIS on va pouvoir comprendre comment le Bundle tout fait fonctionne ! Et on est d’accord que c’est quand même mieux de comprendre ce qu’on fait et ce qu’on utilise.

A la base, dans mon projet, j’avais déjà deux Bundles. Un Bundle de base où y’a rien qu’une page d’accueil dedans (RacineBundle) et un Bundle avec mon CRUD (create, read, update, delete => en gros, les fichiers qui permettent d’ajouter, modifier, supprimer et afficher des trucs depuis une base de données).

Tu notes qu’il y a un nouveau Bundle qui s’appelle SecurityBundle. C’est là dedans qu’on a les fichiers et le code qui s’occupent des sessions.

001-3_bundle

Premier fichier important : config.yml

Parce qu’on va importer 3 ressources importantes qu’on va voir ci-dessous : parameters, security, services.

002-config_general

Commençons par security.yml :

Au premier coup d’oeil, on voit que dans ce fichier, il y a une hiérarchie avec des rôles (role_hierarchy). Les rôles n’auront pas les mêmes droits.

Ensuite, il y a le paramètre encoders et comme le dit le commentaire « plaintext« , c’est « en droit, en non crypté ». En gros, les noms des utilisateurs sont en clair.

Le paramètre providers va mettre en mémoire les utilisateur avec leur identifiant, les mots de passe et les rôles attribués à chacun.

Dans la partie firewalls, la partie dev se réfère au site en mode développement. Pendant que le site est dans ce mode, les tests de sécurité ne seront pas effectués sur les éléments css, images ou js parce qu’en théorie, ce sont des trucs qu’on aura fait nous (ça vient pas d’attaques externes), donc en théorie, c’est sécure.

Dans la partie main, ^/ veut dire que ça s’applique à tout le site.
On voit également que dans provider, il y a in_memory et in_memory se réfère à la partie providers > in_memory.

Dans la partie form_login et logout, des paths sont configurés.

003-security

Dans le fichier routing.yml général

On définit les chemins des routings des bundles.

004-routingDans le routing du Bundle SecurityBundle :

On voit les path précédemment configurés dans security.yml. A savoir /login, /login_check et /logout.

005-securitybundle_resources_config_routingLe fichier login.html.twig et son formulaire de connexion

Il y a le formulaire de connexion et on peut voir que dans le paramètre action, il y a le path vers login_check.

006-securitybundle_resources_views_security_loginDans SecurityController, examinons la fonction loginAction.

Dans un premier temps, on a une condition : si le visiteur est connecté, alors on le redirige vers l’accueil du Bundle CRUD.

Dans un second temps, si la condition n’est pas remplie, donc le visiteur n’est pas connecté et donc on va appeler le service d’authentification des utilisateurs

007-securitybundle_controller_securitycontroller

Exemple d’affichage avec une condition de connexion

Dans index.html.twig, on voit un exemple d’un élément qui ne sera affiché que si un utilisateur a un role_admin ou un role_auteur. Par conséquent, si aucune de ces deux conditions n’est vraie, rien ne s’affichera.

On l’écrit avec :

{% if is_granted(‘ROLE_ADMIN’) or is_granted(‘ROLE_AUTEUR’) %}
élément  à afficher si un utilisateur répondant à ces critères est connecté
{% endif %}

Ici, il s’agira d’afficher un lien qui mènera vers le CRUD et en particulier la page pour créer une nouvelle entrée.

008-crudbundle_resources_views_test_indexEncore un autre exemple dans le fichier show.html.twig.

009-crudbundle_resources_views_test_showDans cet exemple, on voit qu’on a un lien de Déconnexion dont le path est logout (soit le chemin paramétrer dans routing.yml  (pour l’affichage de la page en question), qui renvoie également au logout du security.yml (pour l’exécution de l’action de déconnexion).

010-afficher_si_connecte_test


Ressources externes :

Un commentaire pour “Symfony et les sessions

Laisser un commentaire

Articles similaires

Commencez à saisir votre recherche ci-dessus et pressez Entrée pour rechercher. ESC pour annuler.

Retour en haut