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:
user
anon
caso não estiver autenticado).roles
IS_AUTHENTICATED_*
(veja as funções abaixo).User
.isGranted
.Token
trust_resolver
AuthenticationTrustResolverInterface
,
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_authenticated
is_anonymous
IS_AUTHENTICATED_ANONYMOUSLY
com a função isGranted
.is_remember_me
IS_AUTHENTICATED_REMEMBERED
, veja abaixo.is_fully_authenticated
IS_AUTHENTICATED_FULLY
, veja abaixo.has_role
'ROLE_ADMIN' in roles
.