3 pièce(s) jointe(s)
Symfony - Accès admin par l'admin uniquement
Bonjour,
je suis en train de créer un blog avec symfony et je rencontre un petit soucis au niveau des droits admin. A la base chaque personne qui crée leur compte ont un rôle user obligatoire. Sauf que je peux quand même me connecter avec cet user dans mon espace admin... ce qui devrait normalement ne pas être possible.
Dans mon phpmyadmin les rôles sont bien défini (voir photo), dans services.yaml je n'autorise que l'admin. je ne vois pas trop d'où ça peut venir...
Pièce jointe 597069
security.yaml :
Code:
1 2 3 4
|
access_control:
# require ROLE_ADMIN for /admin*
- { path: '^/admin', roles: ROLE_ADMIN } |
Entité User :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
/**
* @ORM\Column(type="json")
*/
private $roles = [];
/**
* @see UserInterface
*/
public function getRoles(): array
{
$roles = $this->roles;
// guarantee every user at least has ROLE_USER
$roles[] = 'ROLE_USER';
$roles[] = 'ROLE_ADMIN';
return array_unique($roles);
}
public function setRoles(array $roles): self
{
$this->roles = $roles;
return $this;
} |
Je vous montre au cas où le process pour enregistrer un user :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
/**
* register
* @Route("/registration", name="registration")
* @param mixed $request
* @param mixed $entityManager
* @param mixed $passwordEncoder
* @return Response
*/
public function register(Request $request, EntityManagerInterface $entityManager, UserPasswordEncoderInterface $passwordEncoder): Response
{
//On construit le formulaire
$user = new User();
$form = $this->createForm(UserType::class, $user);
//Gérer la soumision du formulaire (ne se passera que avec la méthode POST)
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
//On encode le mot de passe
$password = $passwordEncoder->encodePassword($user, $user->getPassword());
$user->setPassword($password);
//On donne un rôle user
$user->setRoles(['user']);
//Sauvegarder l'utilisateur
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->flush();
return $this->redirectToRoute('posts');
}
return new Response($this->twig->render('pages/registration.html.twig', [
'form' => $form->createView()
]));
} |
Merci pour votre aide