Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
symfony5:securite_entite_user [2021/04/04 08:44] marclebrun [Création de l'entité] |
— (Version actuelle) | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== L'entité User ====== | ||
- | |||
- | ===== Création de l'entité ===== | ||
- | |||
- | <code bash> | ||
- | php bin/console make:entity User | ||
- | </code> | ||
- | |||
- | Fichiers créés : | ||
- | |||
- | | src/Entity/**User**.php | | ||
- | | src/Repository/**UserRepository**.php | | ||
- | |||
- | Ajout des propriétés : | ||
- | |||
- | ^ Nom ^ Type ^ Longueur ^ Nullable ^ | ||
- | | email | string | 255 | Non | | ||
- | | username | string | 255 | Non | | ||
- | | roles | simple_array | | Non | | ||
- | | password | string | 255 | Non | | ||
- | |||
- | Ensuite pour ajouter d'autres champs à l'entité, il suffit de refaire la | ||
- | commande ''symfony console make:entity'' sur l'entité **User** et | ||
- | ajouter les champs supplémentaires. | ||
- | |||
- | ==== Note sur le champ ROLES ==== | ||
- | |||
- | j'ai utilisé le type ''simple_array'' plutôt que le type ''json'' | ||
- | car sur mon serveur **MariaDB** le type de champ ''json'' n'était | ||
- | pas encore supporté, alors qu'en **MySQL** il existe depuis longtemps... | ||
- | |||
- | Le champ dans la DB est du type **longtext** et son contenu doit être | ||
- | constitué de chaînes séparées par des virgules, par exemple ''ROLE_USER,ROLE_ADMIN''. | ||
- | |||
- | ==== Implémenter UserInterface ==== | ||
- | |||
- | Éditer la classe **App\Entity\User** pour qu'elle implémente l'interface **UserInterface** : | ||
- | |||
- | <code php src/Entity/User.php> | ||
- | // ... | ||
- | |||
- | use Symfony\Component\Security\Core\User\UserInterface; | ||
- | |||
- | class User implements UserInterface | ||
- | { | ||
- | |||
- | // ... | ||
- | | ||
- | // Ajouter ou modifier les fonctions requises : | ||
- | //********************************************* | ||
- | | ||
- | public function getUsername(): ?string | ||
- | { | ||
- | return $this->username; | ||
- | } | ||
- | | ||
- | public function eraseCredentials() { | ||
- | | ||
- | } | ||
- | |||
- | public function getSalt() { | ||
- | | ||
- | } | ||
- | |||
- | public function getRoles() { | ||
- | $roles = $this->roles; | ||
- | // guarantee every user at least has ROLE_USER | ||
- | $roles[] = 'ROLE_USER'; | ||
- | |||
- | return array_unique($roles); | ||
- | } | ||
- | | ||
- | } | ||
- | </code> | ||
- | |||
- | ===== Créer la table dans la DB ===== | ||
- | |||
- | Créer une migration : | ||
- | |||
- | <code bash> | ||
- | php bin/console make:migration | ||
- | </code> | ||
- | |||
- | Appliquer la migration : | ||
- | |||
- | <code bash> | ||
- | php bin/console doctrine:migrations:migrate | ||
- | </code> | ||
- | |||
- | ===== Fixture ===== | ||
- | |||
- | **AVANT D'APPLIQUER CETTE FIXTURE, IL FAUT D'ABORD AVOIR CONFIGURÉ | ||
- | L'ENCODAGE DES MOTS DE PASSE !!!** | ||
- | |||
- | <code php src/DataFixtures/UserFixtures.php> | ||
- | <?php | ||
- | |||
- | namespace App\DataFixtures; | ||
- | |||
- | use App\Entity\User; | ||
- | use Doctrine\Bundle\FixturesBundle\Fixture; | ||
- | use Doctrine\Common\Persistence\ObjectManager; | ||
- | use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface; | ||
- | |||
- | class UserFixtures extends Fixture | ||
- | { | ||
- | private $encoder; | ||
- | |||
- | public function __construct(UserPasswordEncoderInterface $encoder) { | ||
- | $this->encoder = $encoder; | ||
- | } | ||
- | |||
- | public function load(ObjectManager $manager) { | ||
- | |||
- | $user = new User(); | ||
- | $user->setUserName('Bubule'); | ||
- | $user->setEmail('bubule@mail.com'); | ||
- | $user->setPassword($this->encoder->encodePassword($user, 'testtest')); | ||
- | $user->setRoles(['ROLE_USER', 'ROLE_ADMIN']); | ||
- | |||
- | $manager->persist($user); | ||
- | $manager->flush(); | ||
- | } | ||
- | } | ||
- | </code> | ||
- | |||
- | Pour rappel, appliquer les fixtures se fait par cette commande : | ||
- | |||
- | <code bash> | ||
- | php bin/console doctrine:fixtures:load | ||
- | </code> | ||