Проверьте, установлен ли пользовательский объект внутри аннотации языка выражений Symfony - PullRequest
0 голосов
/ 06 ноября 2019

Я использую аннотацию @Security, чтобы контролировать, какие роли имеют доступ к определенным маршрутам в моем приложении Symfony 3.4, оно работает, когда я вошел в систему, однако, когда объект user не существует, например, когда время сеансая получаю следующее исключение:

Unable to get a property on a non-object.

vendor / symfony / symfony / src / Symfony / Component / ExpressionLanguage / ExpressionLanguage.php: 78 в Symfony \ Component \ExpressionLanguage \ ExpressionLanguage- >valu ('\' 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. Или есть лучший способ?

1 Ответ

0 голосов
/ 06 ноября 2019

Когда вы не аутентифицированы, значение user равно null, поэтому обычно ваша проверка выдает исключение (когда вы пытаетесь получить доступ к методу getRoles () нулевого объекта).

Правильные способы проверить, есть ли у пользователя заданная роль с помощью аннотаций:

@IsGranted("ROLE_MANAGER")

Или:

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

Вы можете увидеть больше здесь: https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/security.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...