Usare le espressioni in sicurezza, rotte, servizi e validazione

In Symfony 2.4 è stato aggiunto un potente componente, ExpressionLanguage. Questo componente consente di aggiungere logiche altamente personalizzate all’interno della configurazione.

Il framework Symfony sfrutta in modo predefinito le espressioni nei modi seguenti:

Per maggiori informazioni su come creare e usare le espressioni, vedere Sintassi di Expression.

Sicurezza: controlli complessi di accesso con espressioni

Oltre a un ruolo, come ROLE_ADMIN, il metodo isGranted accetta anche un oggetto Symfony\Component\ExpressionLanguage\Expression:

use Symfony\Component\ExpressionLanguage\Expression;
// ...

public function indexAction()
{
    if (!$this->get('security.authorization_checker')->isGranted(new Expression(
        '"ROLE_ADMIN" in roles or (user and user.isSuperAdmin())'
    ))) {
        throw $this->createAccessDeniedException();
    }

    // ...
}

In questo esempio, se l’utente corrente ha ROLE_ADMIN o se il metodo isSuperAdmin() dell’oggetto utente restituisce true, sarà garantito l’accesso (nota: l’oggetto utente potrebbe non avere un metodo isSuperAdmin, che è un metodo inventato per questo esempio).

Si sta usando un’espressione. Per saperne di più sulla sintassi del linguaggio delle espressioni, vedere Sintassi di Expression.

All’interno di un’espressione, si ha accesso ad alcune variabili:

user
L’oggetto utente (o la stringa anon, se non si è autenticati).
roles
L’array dei ruoli dell’utente, inclusi quelli dalla gerarchia dei ruoli, ma esclusi gli attributi IS_AUTHENTICATED_* (vedere le funzioni più avanti).
object
L’eventuale oggetto passato come secondo paramentro di isGranted.
token
L’oggetto token.
trust_resolver
L’oggetto Symfony\Component\Security\Core\Authentication\AuthenticationTrustResolverInterface: probabilmente si useranno invece le funzioni is_*.

Inoltre, all’interno di un’espressione si ha access ad alcune funzioni:

is_authenticated
Restituisce true se l’utente è autenticato tramite “ricordami” o “pienamente”, in pratica dice se l’utente è loggato.
is_anonymous
Equivalente a usare IS_AUTHENTICATED_ANONYMOUSLY nella funzione isGranted.
is_remember_me
Simile, ma non uguale a IS_AUTHENTICATED_REMEMBERED, vedere sotto.
is_fully_authenticated
Simile, ma non uguale a IS_AUTHENTICATED_FULLY, vedere sotto.
has_role
Verificare se l’utente abbia il ruolo dato, equivalente a un’espressione come 'ROLE_ADMIN' in roles.

Tabella dei contenuti

Argomento precedente

Espressioni

Argomento successivo

Form

Questa pagina