Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El...
Transcript of Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El...
![Page 1: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/1.jpg)
Symfony 5 : gestion d’utilisateurs
Achref El Mouelhi
Docteur de l’universite d’Aix-MarseilleChercheur en Programmation par contrainte (IA)
Ingenieur en Genie logiciel
H & H: Research and Training 1 / 34
![Page 2: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/2.jpg)
Plan
1 Introduction
2 Creation d’utilisateur
3 Preparation de l’authentification
4 Deconnexion
5 Controle d’accesDans security.yamlDans le controleurDans la vue
6 Utilisateur authentifieDans le controleurDans la vue
7 Roles hierarchiques
H & H: Research and Training 2 / 34
![Page 3: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/3.jpg)
c© Achref EL MOUELHI c©
Introduction
Symfony
But de la securite
Interdire, a un utilisateur, l’acces a une ressource a laquelle il n’a pasdroit
Deux etapes
Qui veut acceder a la ressource?
A t-il le droit d’y acceder?
H & H: Research and Training 3 / 34
![Page 4: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/4.jpg)
c© Achref EL MOUELHI c©
Introduction
Symfony
But de la securite
Interdire, a un utilisateur, l’acces a une ressource a laquelle il n’a pasdroit
Deux etapes
Qui veut acceder a la ressource?
A t-il le droit d’y acceder?
H & H: Research and Training 3 / 34
![Page 5: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/5.jpg)
c© Achref EL MOUELHI c©
Introduction
Symfony
Configuration de la securite
En utilisant des donnees statiques (en memoire)
En utilisant des donnees dynamiques (stockees dans une base dedonnees)
Pour cela
On va utiliser un bundle Symfony a savoir security-bundle
H & H: Research and Training 4 / 34
![Page 6: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/6.jpg)
c© Achref EL MOUELHI c©
Introduction
Symfony
Configuration de la securite
En utilisant des donnees statiques (en memoire)
En utilisant des donnees dynamiques (stockees dans une base dedonnees)
Pour cela
On va utiliser un bundle Symfony a savoir security-bundle
H & H: Research and Training 4 / 34
![Page 7: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/7.jpg)
c© Achref EL MOUELHI c©
Introduction
Symfony
Configuration de la securite
En utilisant les annotations
Et en definissant quelques regles dansconfig/packages/security.yml
Mais on peut aussi utiliser :
le format XML
les tableaux imbriques de PHP
H & H: Research and Training 5 / 34
![Page 8: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/8.jpg)
c© Achref EL MOUELHI c©
Introduction
Symfony
Contenu de security.yaml
security:# https://symfony.com/doc/current/security.html#where-do-users-come
-from-user-providersproviders:
users_in_memory: { memory: null }firewalls:
dev:pattern: ˆ/(_(profiler|wdt)|css|images|js)/security: false
main:anonymous: lazyprovider: users_in_memory
access_control:# - { path: ˆ/admin, roles: ROLE_ADMIN }# - { path: ˆ/profile, roles: ROLE_USER }
H & H: Research and Training 6 / 34
![Page 9: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/9.jpg)
c© Achref EL MOUELHI c©
Introduction
Symfony
Plusieurs etapes
Preparation de la partie utilisateur (qui va se connecter)
Preparation de la partie authentification (formulaired’authentification, deconnexion...)
Gestion de roles
H & H: Research and Training 7 / 34
![Page 10: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/10.jpg)
c© Achref EL MOUELHI c©
Introduction
Symfony
Si on n’a pas choisi la version complete a la creation du projet,executez
composer require symfony/security-bundle
H & H: Research and Training 8 / 34
![Page 11: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/11.jpg)
c© Achref EL MOUELHI c©
Creation d’utilisateur
Symfony
Pour creer la classe User
executez la commande php bin/console make:user
repondez a The name of the security user class par User
repondez a Do you want to store user data in the database (viaDoctrine)? par yes
repondez a Enter a property name that will be the unique "display"name for the user par email
repondez a Does this app need to hash/check user passwords? par yes
Le resultat est
created: src/Entity/User.phpcreated: src/Repository/UserRepository.phpupdated: src/Entity/User.phpupdated: config/packages/security.yaml
H & H: Research and Training 9 / 34
![Page 12: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/12.jpg)
c© Achref EL MOUELHI c©
Creation d’utilisateur
Symfony
Pour creer la classe User
executez la commande php bin/console make:user
repondez a The name of the security user class par User
repondez a Do you want to store user data in the database (viaDoctrine)? par yes
repondez a Enter a property name that will be the unique "display"name for the user par email
repondez a Does this app need to hash/check user passwords? par yes
Le resultat est
created: src/Entity/User.phpcreated: src/Repository/UserRepository.phpupdated: src/Entity/User.phpupdated: config/packages/security.yaml
H & H: Research and Training 9 / 34
![Page 13: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/13.jpg)
c© Achref EL MOUELHI c©
Creation d’utilisateur
Nouveau contenu de security.yaml
security:encoders:
App\Entity\User:algorithm: auto
# https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
providers:# used to reload user from session & other features (e.g.
switch_user)app_user_provider:
entity:class: App\Entity\Userproperty: email
firewalls:dev:
pattern: ˆ/(_(profiler|wdt)|css|images|js)/security: false
main:anonymous: lazyprovider: app_user_provider
access_control:
H & H: Research and Training 10 / 34
![Page 14: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/14.jpg)
c© Achref EL MOUELHI c©
Creation d’utilisateur
Symfony
Pour creer la table User
executez la commande php bin/console make:migration
et ensuite la commande php bin/console doctrine:migrations:migrate
Pour remplir la table User avec des donnees aleatoires
installez le bundle de fixture composer require --devdoctrine/doctrine-fixtures-bundle
demandez a ce bundle de remplir la table php bin/console make:fixtures
repondez a The class name of the fixtures to create par UserFixtures
H & H: Research and Training 11 / 34
![Page 15: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/15.jpg)
c© Achref EL MOUELHI c©
Creation d’utilisateur
Symfony
Pour creer la table User
executez la commande php bin/console make:migration
et ensuite la commande php bin/console doctrine:migrations:migrate
Pour remplir la table User avec des donnees aleatoires
installez le bundle de fixture composer require --devdoctrine/doctrine-fixtures-bundle
demandez a ce bundle de remplir la table php bin/console make:fixtures
repondez a The class name of the fixtures to create par UserFixtures
H & H: Research and Training 11 / 34
![Page 16: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/16.jpg)
c© Achref EL MOUELHI c©
Creation d’utilisateur
Symfony
Contenu genere pour UserFixtures
namespace App\DataFixtures;
use Doctrine\Bundle\FixturesBundle\Fixture;use Doctrine\Persistence\ObjectManager;
class UserFixtures extends Fixture{
public function load(ObjectManager $manager){
// $product = new Product();// $manager->persist($product);
$manager->flush();}
}
H & H: Research and Training 12 / 34
![Page 17: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/17.jpg)
c© Achref EL MOUELHI c©
Creation d’utilisateur
Nouveau contenu de UserFixtures
class UserFixtures extends Fixture{
private $passwordEncoder;
public function __construct(UserPasswordEncoderInterface $passwordEncoder){
$this->passwordEncoder = $passwordEncoder;}public function load(ObjectManager $manager){
$user = new User();$user->setEmail(’[email protected]’);$user->setRoles([’ROLE_ADMIN’]);$user->setPassword($this->passwordEncoder->encodePassword(
$user,’wick’
));$manager->persist($user);$user2 = new User();$user2->setEmail(’[email protected]’);$user2->setPassword($this->passwordEncoder->encodePassword(
$user2,’john’
));$manager->persist($user2);$manager->flush();
}}
Les use necessaires
use App\Entity\User;use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
H & H: Research and Training 13 / 34
![Page 18: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/18.jpg)
c© Achref EL MOUELHI c©
Creation d’utilisateur
Nouveau contenu de UserFixtures
class UserFixtures extends Fixture{
private $passwordEncoder;
public function __construct(UserPasswordEncoderInterface $passwordEncoder){
$this->passwordEncoder = $passwordEncoder;}public function load(ObjectManager $manager){
$user = new User();$user->setEmail(’[email protected]’);$user->setRoles([’ROLE_ADMIN’]);$user->setPassword($this->passwordEncoder->encodePassword(
$user,’wick’
));$manager->persist($user);$user2 = new User();$user2->setEmail(’[email protected]’);$user2->setPassword($this->passwordEncoder->encodePassword(
$user2,’john’
));$manager->persist($user2);$manager->flush();
}}
Les use necessaires
use App\Entity\User;use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
H & H: Research and Training 13 / 34
![Page 19: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/19.jpg)
c© Achref EL MOUELHI c©
Creation d’utilisateur
Symfony
Pour inserer l’utilisateur dans la base de donnees, executez
php bin/console doctrine:fixtures:load ou phpbin/console d:f:l
H & H: Research and Training 14 / 34
![Page 20: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/20.jpg)
c© Achref EL MOUELHI c©
Preparation de l’authentification
A partir du terminal, executez la commande suivante
php bin/console make:auth
What style of authentication do you want? [Empty authenticator]:[0] Empty authenticator[1] Login form authenticator> 1
The class name of the authenticator to create (e.g.AppCustomAuthenticator):
> LoginFormAuthenticator
Choose a name for the controller class (e.g. SecurityController) [SecurityController]:
> SecurityController
Do you want to generate a ’/logout’ URL? (yes/no) [yes]:> yes
Le resultat est
created: src/Security/LoginFormAuthenticator.phpupdated: config/packages/security.yamlcreated: src/Controller/SecurityController.phpcreated: templates/security/login.html.twig
H & H: Research and Training 15 / 34
![Page 21: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/21.jpg)
c© Achref EL MOUELHI c©
Preparation de l’authentification
A partir du terminal, executez la commande suivante
php bin/console make:auth
What style of authentication do you want? [Empty authenticator]:[0] Empty authenticator[1] Login form authenticator> 1
The class name of the authenticator to create (e.g.AppCustomAuthenticator):
> LoginFormAuthenticator
Choose a name for the controller class (e.g. SecurityController) [SecurityController]:
> SecurityController
Do you want to generate a ’/logout’ URL? (yes/no) [yes]:> yes
Le resultat est
created: src/Security/LoginFormAuthenticator.phpupdated: config/packages/security.yamlcreated: src/Controller/SecurityController.phpcreated: templates/security/login.html.twig
H & H: Research and Training 15 / 34
![Page 22: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/22.jpg)
c© Achref EL MOUELHI c©
Preparation de l’authentification
Symfony
Pour tester, allez sur la route /login
essayez de vous connecter avec un email inexistant
ensuite essayez de vous connecter avec un email existant et unmot de passe incorrect
enfin connectez-vous avec [email protected] et wick
Remarque
Probleme de redirection apres la connexion
H & H: Research and Training 16 / 34
![Page 23: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/23.jpg)
c© Achref EL MOUELHI c©
Preparation de l’authentification
Symfony
Pour tester, allez sur la route /login
essayez de vous connecter avec un email inexistant
ensuite essayez de vous connecter avec un email existant et unmot de passe incorrect
enfin connectez-vous avec [email protected] et wick
Remarque
Probleme de redirection apres la connexion
H & H: Research and Training 16 / 34
![Page 24: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/24.jpg)
c© Achref EL MOUELHI c©
Preparation de l’authentification
Symfony
Pour resoudre ce probleme, il faut modifier la methodeonAuthenticationSuccess definie danssecurity/LoginFormAuthenticator pour rediriger vers laroute home route
public function onAuthenticationSuccess(Request$request, TokenInterface $token, $providerKey)
{if ($targetPath = $this->getTargetPath($request
->getSession(), $providerKey)) {return new RedirectResponse($targetPath);
}
return new RedirectResponse($this->urlGenerator->generate(’home_route’));
}
H & H: Research and Training 17 / 34
![Page 25: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/25.jpg)
c© Achref EL MOUELHI c©
Preparation de l’authentification
SymfonyPour modifier les messages d’erreurs de la page d’accueil, creez un fichiersecurity.en.xlf dans translations avec le contenu suivant
<?xml version="1.0"?><xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1
.2"><file source-language="en" datatype="plaintext" original="
file.ext"><body>
<trans-unit id="Invalid credentials."><source>Invalid credentials.</source><target>Le mot de passe est invalide</target>
</trans-unit><trans-unit id="Email could not be found.">
<source>Email could not be found.</source><target>Email non-trouve</target>
</trans-unit></body>
</file></xliff>
H & H: Research and Training 18 / 34
![Page 26: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/26.jpg)
c© Achref EL MOUELHI c©
Deconnexion
Symfony
Pour se deconnecter
essayez la route /logout
Question
Comment rediriger vers la page d’authentification?
H & H: Research and Training 19 / 34
![Page 27: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/27.jpg)
c© Achref EL MOUELHI c©
Deconnexion
Symfony
Pour se deconnecter
essayez la route /logout
Question
Comment rediriger vers la page d’authentification?
H & H: Research and Training 19 / 34
![Page 28: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/28.jpg)
c© Achref EL MOUELHI c©
Deconnexion
Symfony
Allez a la section logout de security.yaml
logout:path: app_logout# where to redirect after logout# target: app_any_route
Decommentez la cle target et ajoutez la route
logout:path: app_logout# where to redirect after logouttarget: app_login
H & H: Research and Training 20 / 34
![Page 29: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/29.jpg)
c© Achref EL MOUELHI c©
Deconnexion
Symfony
Allez a la section logout de security.yaml
logout:path: app_logout# where to redirect after logout# target: app_any_route
Decommentez la cle target et ajoutez la route
logout:path: app_logout# where to redirect after logouttarget: app_login
H & H: Research and Training 20 / 34
![Page 30: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/30.jpg)
c© Achref EL MOUELHI c©
Controle d’acces
Symfony
Pour interdire l’acces a une page : deux solutions possibles
soit en configurant la section access control danssecurity.yaml
soit dans le controleur
soit en utilisant la fonction is granted() dans la vue
H & H: Research and Training 21 / 34
![Page 31: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/31.jpg)
c© Achref EL MOUELHI c©
Controle d’acces Dans security.yaml
Symfony
Pour interdire l’acces a tout utilisateur non-authentifie
access_control:- { path: ’ˆ/login’, roles: IS_AUTHENTICATED_ANONYMOUSLY }- { path: ’ˆ/*’, roles: [IS_AUTHENTICATED_FULLY] }
Pour autoriser les utilisateurs qui ont le role admin (ROLE ADMIN)
access_control:- { path: ’ˆ/login’, roles: IS_AUTHENTICATED_ANONYMOUSLY }- { path: ’ˆ/*’, roles: [ROLE_ADMIN] }
H & H: Research and Training 22 / 34
![Page 32: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/32.jpg)
c© Achref EL MOUELHI c©
Controle d’acces Dans security.yaml
Symfony
Pour interdire l’acces a tout utilisateur non-authentifie
access_control:- { path: ’ˆ/login’, roles: IS_AUTHENTICATED_ANONYMOUSLY }- { path: ’ˆ/*’, roles: [IS_AUTHENTICATED_FULLY] }
Pour autoriser les utilisateurs qui ont le role admin (ROLE ADMIN)
access_control:- { path: ’ˆ/login’, roles: IS_AUTHENTICATED_ANONYMOUSLY }- { path: ’ˆ/*’, roles: [ROLE_ADMIN] }
H & H: Research and Training 22 / 34
![Page 33: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/33.jpg)
c© Achref EL MOUELHI c©
Controle d’acces Dans security.yaml
Symfony
Remarques
La cle path accepte les expressions regulieres
Le nom d’un role doit etre ecrit en majuscule
Les mots composants le nom d’un role doivent etre separes parun underscore.
La cle roles accepte une valeur ou un tableau de valeurs
H & H: Research and Training 23 / 34
![Page 34: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/34.jpg)
c© Achref EL MOUELHI c©
Controle d’acces Dans security.yaml
Symfony
Pour restreindre l’acces aux routes du controleur PersonneController auxutilisateurs ayant le role ROLE ADMIN ou ROLE USER
access_control:- { path: ’ˆ/personne’, roles: [ROLE_USER, ROLE_ADMIN] }
En testant, le message d’erreur suivant est affiche
Passing more than one Security attribute to "Symfony\Component\Security\Core\Authorization\AccessDecisionManager::decide()"is not supported.
H & H: Research and Training 24 / 34
![Page 35: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/35.jpg)
c© Achref EL MOUELHI c©
Controle d’acces Dans security.yaml
Symfony
Pour restreindre l’acces aux routes du controleur PersonneController auxutilisateurs ayant le role ROLE ADMIN ou ROLE USER
access_control:- { path: ’ˆ/personne’, roles: [ROLE_USER, ROLE_ADMIN] }
En testant, le message d’erreur suivant est affiche
Passing more than one Security attribute to "Symfony\Component\Security\Core\Authorization\AccessDecisionManager::decide()"is not supported.
H & H: Research and Training 24 / 34
![Page 36: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/36.jpg)
c© Achref EL MOUELHI c©
Controle d’acces Dans security.yaml
Symfony
Explication
Bug dans la version 5 de Symfony
Pour le corriger, il faut aller dans vendor\symfony\security-core\Authorization\TraceableAccessDecisionManager.php
Cherchez la methode decide
Faites les modifications indiquees dans la slide suivante ou danshttps://github.com/symfony/symfony/commit/63984b013c92f5cd2373d81c19554b4270c4b776
H & H: Research and Training 25 / 34
![Page 37: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/37.jpg)
c© Achref EL MOUELHI c©
Controle d’acces Dans security.yaml
SymfonyRemplacez
public function decide(TokenInterface $token, array $attributes,$object = null): bool
Par
public function decide(TokenInterface $token, array $attributes,$object = null/*, bool $allowMultipleAttributes = false*/): bool
Et
$result = $this->manager->decide($token, $attributes, $object);
Par
$result = $this->manager->decide($token, $attributes, $object, 3 < \func_num_args() && func_get_arg(3));
H & H: Research and Training 26 / 34
![Page 38: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/38.jpg)
c© Achref EL MOUELHI c©
Controle d’acces Dans security.yaml
SymfonyRemplacez
public function decide(TokenInterface $token, array $attributes,$object = null): bool
Par
public function decide(TokenInterface $token, array $attributes,$object = null/*, bool $allowMultipleAttributes = false*/): bool
Et
$result = $this->manager->decide($token, $attributes, $object);
Par
$result = $this->manager->decide($token, $attributes, $object, 3 < \func_num_args() && func_get_arg(3));
H & H: Research and Training 26 / 34
![Page 39: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/39.jpg)
c© Achref EL MOUELHI c©
Controle d’acces Dans security.yaml
SymfonyRemplacez
public function decide(TokenInterface $token, array $attributes,$object = null): bool
Par
public function decide(TokenInterface $token, array $attributes,$object = null/*, bool $allowMultipleAttributes = false*/): bool
Et
$result = $this->manager->decide($token, $attributes, $object);
Par
$result = $this->manager->decide($token, $attributes, $object, 3 < \func_num_args() && func_get_arg(3));
H & H: Research and Training 26 / 34
![Page 40: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/40.jpg)
c© Achref EL MOUELHI c©
Controle d’acces Dans security.yaml
SymfonyRemplacez
public function decide(TokenInterface $token, array $attributes,$object = null): bool
Par
public function decide(TokenInterface $token, array $attributes,$object = null/*, bool $allowMultipleAttributes = false*/): bool
Et
$result = $this->manager->decide($token, $attributes, $object);
Par
$result = $this->manager->decide($token, $attributes, $object, 3 < \func_num_args() && func_get_arg(3));
H & H: Research and Training 26 / 34
![Page 41: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/41.jpg)
c© Achref EL MOUELHI c©
Controle d’acces Dans le controleur
Symfony
Pour restreindre l’acces a une methode de PersonneControlleraux utilisateurs authentifies
class PersonneController extends AbstractController{
/*** @Route("/personne/add", name="personne_add")
*/public function addForm(EntityManagerInterface
$entityManager, Request $request){
$this->denyAccessUnlessGranted(’IS_AUTHENTICATED_FULLY’);
// le reste du contenu}
H & H: Research and Training 27 / 34
![Page 42: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/42.jpg)
c© Achref EL MOUELHI c©
Controle d’acces Dans le controleur
Symfony
Pour restreindre l’acces a toutes les methodes dePersonneController aux utilisateurs ayant le role ROLE ADMIN
/**** @IsGranted("ROLE_ADMIN")
*/class PersonneController extends AbstractController{
// le contenu}
H & H: Research and Training 28 / 34
![Page 43: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/43.jpg)
c© Achref EL MOUELHI c©
Controle d’acces Dans le controleur
Symfony
Pour restreindre l’acces a une methode de PersonneControlleraux utilisateurs ayant le role ROLE ADMIN
class PersonneController extends AbstractController{
/*** @IsGranted("ROLE_ADMIN")
* @Route("/personne/add", name="personne_add")
*/public function addForm(EntityManagerInterface
$entityManager, Request $request){
// le reste du contenu}
H & H: Research and Training 29 / 34
![Page 44: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/44.jpg)
c© Achref EL MOUELHI c©
Controle d’acces Dans la vue
Symfony
Pour restreindre une partie de la vue aux utilisateurs ayant le roleROLE ADMIN (contenu a ajouter dans home/index.html.twig)
{% if is_granted(’ROLE_ADMIN’) %}<a href="{{ url(’personne_add’) }}">
Ajouter une personne</a>
{% endif %}
H & H: Research and Training 30 / 34
![Page 45: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/45.jpg)
c© Achref EL MOUELHI c©
Utilisateur authentifie Dans le controleur
Symfony
Pour recuperer l’utilisateur authentifie dans une methode decontroleur
class PersonneController extends AbstractController{
/*** @Route("/personne/add", name="personne_add")
*/public function addForm(EntityManagerInterface
$entityManager, Request $request){
$this->denyAccessUnlessGranted(’IS_AUTHENTICATED_FULLY’);
$user = $this->getUser();// le reste du contenu
}
H & H: Research and Training 31 / 34
![Page 46: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/46.jpg)
c© Achref EL MOUELHI c©
Utilisateur authentifie Dans le controleur
Symfony
Pour recuperer les roles de l’utilisateur
class PersonneController extends AbstractController{
/*** @Route("/personne/add", name="personne_add")
*/public function addForm(EntityManagerInterface
$entityManager, Request $request){
$this->denyAccessUnlessGranted(’IS_AUTHENTICATED_FULLY’);
$user = $this->getUser();roles = $user->getRoles();// le reste du contenu
}
H & H: Research and Training 32 / 34
![Page 47: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/47.jpg)
c© Achref EL MOUELHI c©
Utilisateur authentifie Dans la vue
Symfony
Pour recuperer l’email de la personne authentifie (contenu aajouter dans personne/index.html.twig)
{% if is_granted(’ROLE_ADMIN’) %}<p>Email: {{ app.user.email }}</p>
{% endif %}
H & H: Research and Training 33 / 34
![Page 48: Symfony 5 : gestion d'utilisateurs · 2020-05-21 · Symfony 5: gestion d’utilisateurs Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation](https://reader033.fdocument.pub/reader033/viewer/2022042514/5fa9ab4f7c883c41b51a57d4/html5/thumbnails/48.jpg)
c© Achref EL MOUELHI c©
Roles hierarchiques
Symfony
Dans security.yaml
security:# ...
role_hierarchy:ROLE_ADMIN: ROLE_USERROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
Remarques
L’utilisateur ayant le role ROLE ADMIN a aussi le role ROLE USER
L’utilisateur ayant le role ROLE SUPER ADMIN a aussi les role ROLE ADMIN,ROLE USER et ROLE ALLOWED TO SWITCH
H & H: Research and Training 34 / 34