diff --git a/config/packages/security.yaml b/config/packages/security.yaml index 730a51d59c5f378a09e2851542bc18acce65cccc..15d722412a1ff3476459f29ad783a369960bd233 100644 --- a/config/packages/security.yaml +++ b/config/packages/security.yaml @@ -25,8 +25,8 @@ security: secret: '%kernel.secret%' access_control: - - { path: ^/admin, allow_if: "user and user.isAdmin == true" } - - { path: ^/*, allow_if: "user and user.isLocked != true" } + - { path: ^/admin, allow_if: "user and user.isAdmin() == true" } + - { path: ^/*, allow_if: "user and user.isLocked() != true" } when@test: security: diff --git a/src/Controller/RegistrationController.php b/src/Controller/RegistrationController.php index 46f72b7833b2f63c6981725a44e6c4017a8d6d27..96c886026eb60f8b33d73c21731544c9b58c09a7 100644 --- a/src/Controller/RegistrationController.php +++ b/src/Controller/RegistrationController.php @@ -22,7 +22,7 @@ class RegistrationController extends AbstractController if ($form->isSubmitted() && $form->isValid()) { // Hacher le mot de passe - $hashedPassword = $passwordHasher->hashPassword($user, $form->get('plainPassword')->getData()); + $hashedPassword = $passwordHasher->hashPassword($user, plainPassword: $form->get('plainPassword')->getData()); $user->setPassword($hashedPassword); // Sauvegarder l'utilisateur diff --git a/src/Controller/UserController.php b/src/Controller/UserController.php index a53eb97ea42b9538832991f6359a3350cc2125dc..772f73c412427311a421429b28807b66155908ce 100644 --- a/src/Controller/UserController.php +++ b/src/Controller/UserController.php @@ -8,6 +8,7 @@ use Symfony\Component\Routing\Attribute\Route; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface; use Symfony\Component\Security\Core\User\UserInterface; +use Symfony\Component\HttpFoundation\Request; final class UserController extends AbstractController { @@ -64,4 +65,39 @@ final class UserController extends AbstractController $this->addFlash('success', 'Wishlist supprimée avec succès.'); return $this->redirectToRoute('user_dashboard'); } + + #[Route('/user/profile', name: 'user_profile')] + public function profile(Request $request, EntityManagerInterface $entityManager): Response + { + // Récupérer l'utilisateur connecté + $token = $this->container->get('security.token_storage')->getToken(); + if ($token) { + $user = $token->getUser(); + dump($user); + } else { + dump('Aucun token trouvé'); + } + + if (!$user instanceof User) { + throw $this->createAccessDeniedException('Vous devez être connecté pour accéder à cette page.'); + } + + // Créer le formulaire pour modifier les informations de l'utilisateur + $form = $this->createForm(UserType::class, $user); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + // Sauvegarder les modifications + $entityManager->persist($user); + $entityManager->flush(); + + $this->addFlash('success', 'Votre profil a été mis à jour avec succès.'); + + return $this->redirectToRoute('user_profile'); + } + + return $this->render('user/profile.html.twig', [ + 'form' => $form->createView(), + ]); + } } diff --git a/src/Form/UserType.php b/src/Form/UserType.php new file mode 100644 index 0000000000000000000000000000000000000000..fbb140a00611683f6c38f08660de55994ced4d1d --- /dev/null +++ b/src/Form/UserType.php @@ -0,0 +1,40 @@ +<?php + +namespace App\Form; + +use App\Entity\User; +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\EmailType; +use Symfony\Component\Form\Extension\Core\Type\PasswordType; +use Symfony\Component\Form\Extension\Core\Type\TextType; +use Symfony\Component\Form\FormBuilderInterface; +use Symfony\Component\OptionsResolver\OptionsResolver; + +class UserType extends AbstractType +{ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder + ->add('firstName', TextType::class, [ + 'label' => 'Prénom', + ]) + ->add('lastName', TextType::class, [ + 'label' => 'Nom', + ]) + ->add('email', EmailType::class, [ + 'label' => 'Email', + ]) + ->add('image', TextType::class, [ + 'label' => 'URL de l\'image de profil', + 'required' => false, + ]); + // Note : Ne pas inclure le champ "password" ici pour des raisons de sécurité. + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => User::class, + ]); + } +} \ No newline at end of file diff --git a/templates/user/profile.html.twig b/templates/user/profile.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..ce689c9401f4aac428f341c6e9117f4e782e1dd8 --- /dev/null +++ b/templates/user/profile.html.twig @@ -0,0 +1,23 @@ +{% extends 'base.html.twig' %} + +{% block title %}Mon Profil{% endblock %} + +{% block body %} +<div class="container mt-5"> + <h1>Mon Profil</h1> + + {{ form_start(form) }} + {{ form_row(form.firstName) }} + {{ form_row(form.lastName) }} + {{ form_row(form.email) }} + {{ form_row(form.image) }} + <button type="submit" class="btn btn-primary">Mettre à jour</button> + {{ form_end(form) }} + + {% for message in app.flashes('success') %} + <div class="alert alert-success mt-3"> + {{ message }} + </div> + {% endfor %} +</div> +{% endblock %} \ No newline at end of file