Я написал собственного избирателя, чтобы проверить, является ли пользователь владельцем книги, которую он пытается редактировать.
Поэтому я использую аннотацию «@Security» для защиты контроллера:
@Security("is_granted('BookVoter::ATTRIBUTE_OWNER', book)")
Это то, что я хотел бы, чтобы аннотация @Security выглядела, но она работает только тогда, когда я пишу следующее:
@Security("is_granted('OWNER', book)")
Я не хочу «жестко» кодировать строку «ВЛАДЕЛЕЦ», это константа в моем BookVoter.
Есть идеи как этого добиться?
С уважением.
Что вы передаете @Security
аннотация Язык выражения.
SensionFrameworkExtraBundle обеспечивает is_granted
функция к языку выражения (посмотреть здесь).
Язык выражений по умолчанию имеет constant()
функция, поэтому вы должны использовать ее в вашем случае:
@Security("is_granted(constant('\\Full\\Namespace\\To\\BookVoter::ATTRIBUTE_OWNER'), book)")
Обратите внимание, что вы должны использовать полное обозначение пространства имен.
Других решений пока нет …