2015-08-27 19 views
5

Non riesco a far funzionare correttamente la regola del firewall. Ho un utente che ha il ruolo D-COMPLIANCEDIALOG e una regola del firewall, che concede l'accesso a tale regola: - { path: ^/ , roles: D-COMPLIANCEDIALOG }. Ricevo ancora un accesso negato (Accesso negato, l'utente non è anonimo, né ricorda-me.).Symfony2 Firewall: l'utente ha il ruolo giusto ma "Accesso negato"

#security.yml 

security: 
    encoders: 
     Symfony\Component\Security\Core\User\User: plaintext 
    providers: 
     reddot: 
      id: reddot_user_provider 

    firewalls: 

     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 

     secured_area: 
      pattern: ^/ 
      anonymous: ~ 
      http_basic: ~ 
      simple_form: 
       authenticator: reddot_authenticator 
        check_path: login_check 
        login_path: login 

    access_control: 
     - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/ , roles: D-COMPLIANCEDIALOG } 

dati utente da symfony profiler:

Username admin 
Authenticated? yes 
Roles [D-COMPLIANCEDIALOG] 
Inherited Roles  { } 
Token class Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken 

Quello che ho controllato:

  • Il controllore non ha proprie impostazioni di sicurezza
  • Il nome del ruolo non sembra avere un errore di battitura
  • È davvero l'ultima riga nella regola del firewall, se la rimuovo, ho accesso.
+0

Si potrebbe desiderare di fare il vostro controllo degli accessi login 'percorso: ^/login $, ruolo : IS_AUTHENTICATED_ANONYMOUSLY' con '$' per garantire che la tua rotta login_check sia protetta https://symfony.com/doc/master/bundles/FOSUserBundle/index.html#step-4-configure-your-application-s-security-yml –

risposta

7

Il nome del ruolo non è corretto. Controllare la documentazione Security - Roles

Tutti i ruoli assegnati a un utente devono iniziare con il prefisso ROLE_. Altrimenti, non saranno gestiti dal sistema di sicurezza di Symfony nel modo normale (ad esempio, a meno che tu non stia facendo qualcosa di avanzato, assegnare un ruolo come FOO a un utente e quindi controllare FOO come descritto di seguito non funzionerà).

Ho riscontrato lo stesso problema quando immesso il nome di ruolo 'errato' e sono stato confuso dal messaggio di errore.

0

Anche se Symfony suggest anteponendo i ruoli con ROLE_ .. È comunque possibile utilizzare i vostri ruoli personalizzati tramite Securing by an Expression come:

access_control: 
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/ , allow_if: "has_role('D-COMPLIANCEDIALOG')"}