Mise en place des Roles
Modification Index pour tester les roles Modification du form d'ajout d'un Utilisateur pour selectionner les roles au lieux de les saisir en texte Mise en place d'une page d'accés refuser personnaliser
This commit is contained in:
parent
ca240ee372
commit
f141abf1cc
@ -27,10 +27,13 @@ security:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
access_control:
|
access_control:
|
||||||
# - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
|
# - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||||
# - { path: ^/logout, roles: ROLE_USER }
|
- { path: ^/logout, roles: ROLE_USER }
|
||||||
# - { path: ^/, roles: ROLE_USER }
|
- { path: ^/index, roles: ROLE_USER }
|
||||||
|
- { path: ^/user, roles: ROLE_ADMIN }
|
||||||
|
|
||||||
#when@test:
|
#when@test:
|
||||||
# security:
|
# security:
|
||||||
|
18
src/Controller/AccesDeniedController.php
Normal file
18
src/Controller/AccesDeniedController.php
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Controller;
|
||||||
|
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
|
|
||||||
|
class AccesDeniedController extends AbstractController
|
||||||
|
{
|
||||||
|
#[Route('/acces/denied', name: 'app_acces_denied')]
|
||||||
|
public function index(): Response
|
||||||
|
{
|
||||||
|
return $this->render('acces_denied/index.html.twig', [
|
||||||
|
'controller_name' => 'AccesDeniedController',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
@ -7,6 +7,7 @@ use App\Entity\Tables;
|
|||||||
use App\Entity\Clients;
|
use App\Entity\Clients;
|
||||||
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
|
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
|
||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
|
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\EmailType;
|
use Symfony\Component\Form\Extension\Core\Type\EmailType;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
|
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
|
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
|
||||||
@ -37,22 +38,16 @@ class AddUserFormType extends AbstractType
|
|||||||
|
|
||||||
->add('Nom')
|
->add('Nom')
|
||||||
->add('Prenom')
|
->add('Prenom')
|
||||||
->add('Roles', TextType::class)
|
->add('Roles', ChoiceType::class, [
|
||||||
|
'choices' => [
|
||||||
|
'Admin' => 'ROLE_ADMIN',
|
||||||
|
'User' => 'ROLE_USER',
|
||||||
|
],
|
||||||
|
'expanded' => true,
|
||||||
|
'multiple' => true,
|
||||||
|
])
|
||||||
|
|
||||||
->add('Enregistrer', SubmitType::class);
|
->add('Enregistrer', SubmitType::class);
|
||||||
|
|
||||||
|
|
||||||
// Convertir le champ role en tableau
|
|
||||||
$builder->get('Roles')->addModelTransformer(new CallbackTransformer(
|
|
||||||
function ($rolesAsArray) {
|
|
||||||
return implode(', ', $rolesAsArray); // Convertit l'array en string
|
|
||||||
},
|
|
||||||
function ($rolesAsString) {
|
|
||||||
return array_map('trim', explode(',', $rolesAsString)); // Convertit la string en array
|
|
||||||
}
|
|
||||||
));
|
|
||||||
|
|
||||||
;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function configureOptions(OptionsResolver $resolver): void
|
public function configureOptions(OptionsResolver $resolver): void
|
||||||
|
@ -15,6 +15,8 @@ use Symfony\Component\Security\Http\Authenticator\Passport\Credentials\PasswordC
|
|||||||
use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
|
use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
|
||||||
use Symfony\Component\Security\Http\SecurityRequestAttributes;
|
use Symfony\Component\Security\Http\SecurityRequestAttributes;
|
||||||
use Symfony\Component\Security\Http\Util\TargetPathTrait;
|
use Symfony\Component\Security\Http\Util\TargetPathTrait;
|
||||||
|
use Symfony\Component\Security\Core\Exception\AuthenticationException;
|
||||||
|
|
||||||
|
|
||||||
class LoginAuthenticator extends AbstractLoginFormAuthenticator
|
class LoginAuthenticator extends AbstractLoginFormAuthenticator
|
||||||
{
|
{
|
||||||
@ -52,6 +54,11 @@ class LoginAuthenticator extends AbstractLoginFormAuthenticator
|
|||||||
return new RedirectResponse($this->urlGenerator->generate('app_index'));
|
return new RedirectResponse($this->urlGenerator->generate('app_index'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function start(Request $request, ?AuthenticationException $authException = null): RedirectResponse
|
||||||
|
{
|
||||||
|
return new RedirectResponse($this->urlGenerator->generate('app_acces_denied'));
|
||||||
|
}
|
||||||
|
|
||||||
protected function getLoginUrl(Request $request): string
|
protected function getLoginUrl(Request $request): string
|
||||||
{
|
{
|
||||||
return $this->urlGenerator->generate(self::LOGIN_ROUTE);
|
return $this->urlGenerator->generate(self::LOGIN_ROUTE);
|
||||||
|
28
templates/acces_denied/index.html.twig
Normal file
28
templates/acces_denied/index.html.twig
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{% extends 'base.html.twig' %}
|
||||||
|
|
||||||
|
{% block title %}Accès Refusé{% endblock %}
|
||||||
|
|
||||||
|
{% block body %}
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.container {
|
||||||
|
margin-top: 50px;
|
||||||
|
text-align: center;
|
||||||
|
background-color: orange;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
color: #dc3545;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<h1>Accès Refusé</h1>
|
||||||
|
<p>Vous n'avez pas les permissions nécessaires pour accéder à cette page.</p>
|
||||||
|
<a href="{{ path('app_login') }}" class="btn btn-primary">Ce connecter</a>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
@ -4,17 +4,13 @@
|
|||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<style>
|
<style>
|
||||||
.example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
|
|
||||||
.example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<div class="example-wrapper">
|
{% if 'ROLE_ADMIN' in app.user.roles %}
|
||||||
<h1>Hello {{ controller_name }}! ✅</h1>
|
<p>Vous avez accès à toutes les fonctionnalités administratives.</p>
|
||||||
|
{% elseif 'ROLE_USER' in app.user.roles %}
|
||||||
This friendly message is coming from:
|
<p>Vous êtes un utilisateur standard.</p>
|
||||||
<ul>
|
{% else %}
|
||||||
<li>Your controller at <code>D:/Devellopement/FestinHegre/src/Controller/IndexController.php</code></li>
|
<p>Accès limité.</p>
|
||||||
<li>Your template at <code>D:/Devellopement/FestinHegre/templates/index/index.html.twig</code></li>
|
{% endif %}
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
Loading…
Reference in New Issue
Block a user