2012-03-27 8 views
5

Sto cercando di capire come reindirizzare a una determinata pagina (che nel mio caso è la pagina di pagamento) un utente che non ha 'un abbonamento valido in esecuzione.Symfony2: Come reindirizzare su una pagina specifica quando l'utente non è autorizzato ad accedere a un pattern URL

So che potrei farlo mettendo un controllo isGranted in tutte le mie azioni, ma non mi piace questa soluzione in quanto sembra essere una grande perdita di tempo, data la quantità di azioni che ho.

Ho cercato i parametri firewall.access_denied_url, ma non desidero collegare AccessDenied alla pagina di pagamento perché, ad esempio, l'accesso alla pagina di amministrazione è negato a qualsiasi utente che non ha il ROLE_ADMIN, ed essendo reindirizzato alla pagina di pagamento non ha alcun senso.

Ho già un votante che controlla se un utente è valido o meno e concede l'accesso in quel caso, ma come potrei riuscire a usare questo votante quando un utente prova a raggiungere un determinato pattern e lo reindirizza quando l'accesso è negato?

Grazie in anticipo!

risposta

1

È possibile utilizzare JMSAopBundle.

Da documentazione:

Questo pacchetto aggiunge funzionalità di AOP a Symfony2.

Se non hai ancora sentito parlare di AOP, in pratica ti permette di separare un problema trasversale (ad esempio, i controlli di sicurezza) in una classe dedicata, senza dover ripetere quel codice in tutti i punti in cui è presente necessario.

In altre parole, questo consente di eseguire codice personalizzato prima e dopo l'invocazione di determinati metodi nel livello di servizio o nei controller. È inoltre possibile scegliere di saltare l'invocazione del metodo originale o generare eccezioni.

+1

Perché non è possibile utilizzare un listener controller semplice? – meze

+1

Immagino che questo pacchetto faccia il suo lavoro tramite gli ascoltatori. Naturalmente puoi ottenerlo tu stesso tramite gli ascoltatori. Correzione –

6

in app/config/security.yml aggiungere misure di sicurezza:

access_denied_url:/pippo/error403

Symfony verrà quindi reindirizzare tutte le pagine che l'utente non può accedere a/foo page/error403.

+1

, inoltrerà (sottorequest interno) –