Bonjour,
J'ai un formulaire d'inscruption qui doit permettre à un administrateur d'enrregistrer un nouvau utilisateur et de lui assigenr un role
Ce que je fais
Mon class User.php
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints\EqualTo;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
*/
class User implements UserInterface
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
/**
* @ORM\Column(type="string", length=255)
* @Assert\EqualTo(propertyPath= "password_confirme")
*/
private $password;
/**
* @Assert\EqualTo(propertyPath= "password", message="Vous n'avez pas taper le meme mot de passe")
*/
public $password_confirme;
/**
* @ORM\Column(type="string", length=255)
*/
private $email;
/**
* @ORM\Column(type="string", nullable=true, length=255)
*/
private $role;
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getPassword(): ?string
{
return $this->password;
}
public function setPassword(string $password): self
{
$this->password = $password;
return $this;
}
public function getEmail(): ?string
{
return $this->email;
}
public function setEmail(string $email): self
{
$this->email = $email;
return $this;
}
public function getRole()
{
return $this->role;
}
public function setRole($role)
{
$this->role = $role;
return $this;
}
public function getUserName(){}
public function eraseCredentials(){}
public function getSalt(){}
public function getRoles(){
return [$this->role];
}
}
UserType.php
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('email')
->add('name')
->add('password', PasswordType::class)
->add('password_confirme', PasswordType::class)
->add('role', ChoiceType::class, [
'label' =>'Role',
'placeholder'=>'',
'choices' =>[
'Administrateur'=>'ROLE_ADMIN',
'Traiteur ' =>'ROLE_SOUSCOMMISSION',
],
])
;
}
L'action inscription de mon controller UserController.php
/**
* @Route("/inscription", name="security")
*/
public function inscription(Request $request, ObjectManager $manager, UserPasswordEncoderInterface $encoder)
{
$user= new User();
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$hash = $encoder->encodePassword($user, $user->getPassword());
$user->setPassword($hash);
$manager->persist($user);
$manager->flush();
return $this->redirectToRoute('security_login');
}
return $this->render('security/inscrie.html.twig', [
'form' => $form->createView(),
]);
}
Security.yaml
security:
encoders:
App\Entity\User:
algorithm: bcrypt
# https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
providers:
in_memory: { memory: ~ }
in_database:
entity:
class: App\Entity\User
property: name
role_hierarchy:
# Un admin hérite des droits d'utilisateur et de souscommission
ROLE_ADMIN: ROLE_SOUSCOMMISSION
# On garde ce rôle superadmin, il nous resservira par la suite
#ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: true
provider:
in_database
form_login:
login_path: security_login
check_path: security_login
logout:
path: security_logout
target: home
# activate different ways to authenticate
# http_basic: true
# https://symfony.com/doc/current/security.html#a-configuring-how-your-users-will-authenticate
# form_login: true
# https://symfony.com/doc/current/security/form_login_setup.html
# Easy way to control access for large sections of your site
# Note: Only the *first* access control that matches will be used
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/admin/traitement, roles: ROLE_SOUSCOMMISSION }
Ce que je veux
Je veux si un nouveau utilisateur connecte avec son, le système lui rédirige vers la source demandée.
J'arrive à enrregistrer un nouveau utilisateur au noveau de la base avec un role. Mais lorsque je me connect et je t'ante d'accéder au source le système m'affich une erreur.
Je veux votre aide et je sais il ya des bundels pour gérer l'authentification, mais j'en veu pas l'utilser
Ce que j'obtiens
Access Denied.