【问题标题】:Symfony @Security Annotation with a custom Voter带有自定义投票者的 Symfony @Security 注释
【发布时间】:2015-07-21 16:31:00
【问题描述】:

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

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

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

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

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

问候。

【问题讨论】:

    标签: php security symfony annotations


    【解决方案1】:

    你传递给@Security注解的是Expression Language

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

    表达式语言默认有一个constant() 函数,所以你应该在你的情况下使用它:

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

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

    【讨论】:

    • 非常感谢!正是我需要的。
    • 我回到家尝试了你的方法,也找不到常数。我用作曲家安装了表达式语言..嗯还有其他想法如何在“is_granted”中传递常量吗?
    • 好的,这里是交易:你必须使用'\\"双反斜杠来指定常量值。
    猜你喜欢
    • 2019-03-07
    • 2014-08-11
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2022-10-30
    相关资源
    最近更新 更多