Documentação do Symfony
Renderizada do repositório symfony-docs-pt-BR no Github
No Symfony 2.4, um poderoso componente ExpressionLanguage foi adicionado ao Symfony. Isso nos permite adicionar lógica altamente personalizada dentro da configuração.
O Framework Symfony utiliza expressões prontas para uso nas seguintes formas:
Para mais informações sobre como criar e trabalhar com expressões, consulte /components/expression_language/syntax.
Adicionalmente a um papel como ROLE_ADMIN, o método isGranted também
aceita um objeto 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();
}
// ...
}
Nesse exemplo, se o usuário atual possui ROLE_ADMIN ou se o método
isSuperAdmin() do objeto do usuário atual retornar True, então o acesso
será concedido (nota: o seu objeto User pode não ter um método isSuperAdmin,
esse método foi inventado para esse exemplo).
Isso usa uma expressão e para aprender mais sobre a sintaxe da linguagem de expressão , consulte /components/expression_language/syntax.
Dentro da expressão, você tem acesso a uma série de variáveis:
useranon caso não estiver autenticado).rolesIS_AUTHENTICATED_* (veja as funções abaixo).User.isGranted.Tokentrust_resolverAuthenticationTrustResolverInterface,
você provavelmente usará as funções is_* abaixo em vez disso.Além disso, você tem acesso a uma série de funções dentro da expressão:
is_authenticatedis_anonymousIS_AUTHENTICATED_ANONYMOUSLY com a função isGranted.is_remember_meIS_AUTHENTICATED_REMEMBERED, veja abaixo.is_fully_authenticatedIS_AUTHENTICATED_FULLY, veja abaixo.has_role'ROLE_ADMIN' in roles.