2015-07-21 84 views
3

我寫了一個自定義選舉器來檢查用戶是否是圖書的所有者,他試圖編輯它。 所以我使用了「@security」的註釋,以確保控制器:Symfony @Security Annotation with a custom Voter

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

這是我想有@security註解是什麼樣子,但是當我寫了下面這只是工作:

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

我不想「硬編碼」'OWNER'字符串,它是我的BookVoter中的常量。 任何想法如何實現這一目標?

問候。

回答

3

您傳遞給@Security的註釋是Expression Language

SensionFrameworkExtraBundle將is_granted函數提供給表達式語言(see here)。

表達式語言預設具有constant()功能,所以你應該在你的情況下使用它:

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

請注意,您應該使用完整的命名空間的符號。

+0

非常感謝!正是我需要的。 – user3746259

+0

我回到家了,試了一下你的方法,也找不到常數。我用作曲家安裝了表達式語言..嗯任何其他想法如何傳遞「is_granted」內的常量? – user3746259

+2

好吧,這裏是處理:你必須使用'\\'雙反斜線來指定常量值。 – user3746259