Outils pour utilisateurs

Outils du site


symfony5:securite_entite_user

Ceci est une ancienne révision du document !


L'entité User

Création de l'entité

symfony console make:user

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

:!: à vérifier :!:

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.

Créer la table dans la DB

Créer une migration :

php bin/console make:migration

Appliquer la migration :

php bin/console doctrine:migrations:migrate

Fixture

AVANT D'APPLIQUER CETTE FIXTURE, IL FAUT D'ABORD AVOIR CONFIGURÉ L'ENCODAGE DES MOTS DE PASSE !!!

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();
    }
}

Pour rappel, appliquer les fixtures se fait par cette commande :

php bin/console doctrine:fixtures:load
symfony5/securite_entite_user.1617526762.txt.gz · Dernière modification: 2021/04/04 08:59 par marclebrun