Bonjour à tous,

En voulant cacher un link aux utilisateurs ne disposant pas du rôle admin j'obtiens une 403 au lieu de pouvoir voir le restant de la page... SI vous pouviez m'aiguiller sur ce qui cloche ...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
	{% if is_granted('ROLE_ADMIN') %}
			<a class="link-retour" href="{{path('app_admin_dashboard')}}">Revenir au dashboard</a>
		{% endif %}

UsersAuthenticator :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
 
namespace App\Security;
 
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator;
use Symfony\Component\Security\Http\Authenticator\Passport\Badge\CsrfTokenBadge;
use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
use Symfony\Component\Security\Http\Authenticator\Passport\Credentials\PasswordCredentials;
use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
use Symfony\Component\Security\Http\Util\TargetPathTrait;
 
class UsersAuthenticator extends AbstractLoginFormAuthenticator
{
    use TargetPathTrait;
 
    public const LOGIN_ROUTE = 'app_login';   
 
    public function __construct(private UrlGeneratorInterface $urlGenerator)
    {
 
    }
 
    public function authenticate(Request $request): Passport
    {
        $email = $request->request->get('email', '');
 
        $request->getSession()->set(Security::LAST_USERNAME, $email);
 
        return new Passport(
            new UserBadge($email),
            new PasswordCredentials($request->request->get('password', '')),
            [
                new CsrfTokenBadge('authenticate', $request->request->get('_csrf_token')),
            ]
        );
    }
 
    public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response
    {
        if ($targetPath = $this->getTargetPath($request->getSession(), $firewallName)) {
            return new RedirectResponse($targetPath);
        }
 
        $user = $token->getUser();
        if (in_array('ROLE_ADMIN', $user->getRoles(), true)) {
            return new RedirectResponse($this->urlGenerator->generate('app_admin_dashboard'));
        }
        return new RedirectResponse($this->urlGenerator->generate('main'));
        //throw new \Exception('TODO: provide a valid redirect inside '.__FILE__);
    }
 
    protected function getLoginUrl(Request $request): string
    {
        return $this->urlGenerator->generate(self::LOGIN_ROUTE);
    }
}