Bonjour à tous,
contexte;
J'ai créé gillesBundle et ai renommé ma route par default testRole.
j'ai ensuite configuré mon app/security.php qui pointe sur SecurityController -> SecurityView pour le rendu.
Le but est de pouvoir accéder sur la page testRole quelque soi les droits anonyme ou user etc...
mais par contre avec des conditions différentes.
si anonymous condition 1 si user condition2 etc...
hors si je met la dite page en anonymous:true afin que mes utilisateurs non connecté puisse voir la page, je ne peux mettre une condition si connecté en temps que user puisque non protégé par le firewall.
de plus connecté ou anonymous ça passe puisque user est plus élevé que anonymous.
et si je protège ma page par le firewall j'ai donc mes roles respectif mais là du coup je suis redirigé sur ma page login.
donc à quoi peut il bien servire ce role IS_AUTHENTICATED_ANONYMOUSLY?
mes codes:
app/security.php
app/routing
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 security: encoders: Symfony\Component\Security\Core\User\User: plaintext role_hierarchy: ROLE_ADMIN: ROLE_USER ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] providers: in_memory: memory: users: user: { password: userpass, roles: [ 'ROLE_USER' ] } admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] } firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false main_login: pattern: ^/login$ anonymous: true # On autorise alors les anonymes sur ce pare-feu main: pattern: ^/ anonymous: false provider: in_memory form_login: login_path: login check_path: login_check logout: path: logout target: /testRole access_control: - { path: ^/testRole, roles: IS_AUTHENTICATED_ANONYMOUSLY }
SecurityController
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 app/routing resource: "@gillesBundle/Resources/config/routing.yml" prefix: / login: pattern: /login defaults: { _controller: gillesBundle:Security:login } login_check: pattern: /login_check logout: pattern: /logout
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 <?php // src/OC/UserBundle/Controller/SecurityController.php; namespace gillesBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Security\Core\SecurityContext; class SecurityController extends Controller { public function loginAction(Request $request) { if ($this->get('security.context')->isGranted('IS_AUTHENTICATED_REMEMBERED')) { return $this->redirectToRoute('gilles_homepage'); } $authenticationUtils = $this->get('security.authentication_utils'); return $this->render('gillesBundle:Security:login.html.twig', array( 'last_username' => $authenticationUtils->getLastUsername(), 'error' => $authenticationUtils->getLastAuthenticationError(), )); } }
login:
routing
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 {# src/OC/UserBundle/Resources/views/Security/login.html.twig #} {% extends "::base.html.twig" %} {% block body %} {# S'il y a une erreur, on l'affiche dans un joli cadre #} {% if error %} <div class="alert alert-danger">{{ error.message }}</div> {% endif %} {# Le formulaire, avec URL de soumission vers la route « login_check » comme on l'a vu #} <form action="{{ path('login_check') }}" method="post"> <label for="username">Login :</label> <input type="text" id="username" name="_username" value="{{ last_username }}" /> <label for="password">Mot de passe :</label> <input type="password" id="password" name="_password" /> <br /> <input type="submit" value="Connexion" /> </form> {% endblock %}
security
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 gilles_homepage: path: /testRole defaults: { _controller: gillesBundle:Default:index }
view
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 <?php namespace gillesBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; class DefaultController extends Controller { public function indexAction() { if (!$this->get('security.context')->isGranted('IS_AUTHENTICATED_ANONYMOUSLY')) { echo "pas connecté"; // return $this->redirectToRoute('login'); // echo "<pre>".print_r($this->get('security.context')->getToken(),true)."/<pre>"; } if($this->get("security.context")->isGranted('ROLE_USER')){ echo "connecté"; } return $this->render('gillesBundle:Default:index.html.twig'); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 {% extends "::base.html.twig" %} {% block body %} {% if is_granted("IS_AUTHENTICATED_ANONYMOUSLY") %} anonymous {% endif %} {% endblock %}
je suis dans l'impasse car si anonymous pas de roles même connecté et authentifié car pas protégé et si protégé pas d' anonymous possible car redirigé vers la page login.
Bien à vous
ps: j'ai trouvé cela
IS_AUTHENTICATED_ANONYMOUSLY - automatically assigned to a user who is in a firewall protected part of the site but who has not actually logged in. This is only possible if anonymous access has been allowed.
Automatiquement attribué à un utilisateur qui se trouve dans une partie protégée par un pare-feu du site mais qui n'a pas encore ouvert de session. Cela n'est possible que si l'accès anonyme a été autorisé.
derière un firewall non authentifié c'est ce que je cherche bon sans alors pour suis je redirigé sur login si pas connecté accesscontrol me donne rien.
Partager