检查是否在Symfony表达式语言注释中设置了用户对象

我正在使用@Security注释来控制哪些角色可以访问我的Symfony 3.4应用程序中的某些路由,当我登录时它可以工作,但是当user对象不存在时,例如当会话超时时,会引发以下异常。

Unable to get a property on a non-object.

  

供应商/symfony/symfony/src/Symfony/Component/ExpressionLanguage/ExpressionLanguage.php:78   在   Symfony \ Component \ ExpressionLanguage \ ExpressionLanguage-> evaluate('\'ROLE_MANAGER \'   在user.getRoles()'中,

我的方法定义如下:

/**
 * @Route("/club/{id}/trophies",name="club_trophies",methods={"GET","POST"})
 * @IsGranted("IS_AUTHENTICATED_FULLY")
 * @Security("'ROLE_MANAGER' in user.getRoles()")
 * @param Club $club
 * @return Response
 */
public function trophies(Club $club): Response
{

有没有一种使用Symfony表达语言或类似语言的方法,可以检查user是否存在。还是有更好的方法?

power1234power 回答:检查是否在Symfony表达式语言注释中设置了用户对象

当您未通过身份验证时,user的值为null,因此正常情况下您的检查会引发异常(当您尝试访问null对象的getRoles()方法时。)

使用注释检查用户是否具有给定角色的正确方法是:

@IsGranted("ROLE_MANAGER")

或:

@Security("is_granted('ROLE_MANAGER')")

您可以在此处查看更多信息:https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/security.html

本文链接:https://www.f2er.com/3155384.html

大家都在问