Symfony @Security Annotation与自定义选民

时间:2015-07-21 16:31:01

标签: php security symfony annotations

我写了一个自定义选民来检查用户是否是一本书的所有者,他正在尝试编辑。 因此,我使用“@Security”注释来保护Controller:

@Security("is_granted('BookVoter::ATTRIBUTE_OWNER', book)")

这就是我希望@Security注释看起来像,但它只在我编写以下内容时才有效:

@Security("is_granted('OWNER', book)")

我不想“硬编码”'OWNER'字符串,它是我的BookVoter中的常量。 任何想法如何实现这一目标?

问候。

1 个答案:

答案 0 :(得分:3)

您传递给@Security注释的内容是Expression Language

SensionFrameworkExtraBundle为表达式语言(see here)提供is_granted函数。

表达式语言默认具有constant()功能,因此您应该在您的情况下使用它:

@Security("is_granted(constant('\\Full\\Namespace\\To\\BookVoter::ATTRIBUTE_OWNER'), book)")

请注意,您应该使用完整的命名空间表示法。