2016-10-11 58 views
4

比方說,我有下security.ymlaccess_control塊:的Symfony2 - 設置安全ACCESS_CONTROL爲只允許匿名認證

access_control: 
    - { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/reset-password, roles: IS_AUTHENTICATED_ANONYMOUSLY } 

在這種情況下,每個人都alowed進入homepagereset-password頁面。但是我想只允許這些網頁用於匿名驗證的用戶。完全認證的用戶應該獲得403 access denied error404 page not found

根據documentationallow_if我應該創建角色表達式來定義訪問。但是,如果我不喜歡這樣寫道:

access_control: 
    - { path: ^/reset-password, allow_if: "has_role('IS_AUTHENTICATED_ANONYMOUSLY') and not has_role('IS_AUTHENTICATED_FULLY')" } 

現在下面的想法完全驗證的用戶(登錄)不應該被允許訪問的頁面和匿名認證應該能夠訪問,但是,可惜的是沒有的,用戶能夠訪問它...

任何想法我失蹤?

UPDATE

這得到它的工作,通過正確答案波紋管提示:

- { path: ^/reset-password, allow_if: "is_anonymous() and !is_authenticated()" } 

回答

5

你確定你可以使用has_role()測試IS_*?這些行爲像角色,但他們不是角色。也許這就是爲什麼它總是返回false

好像你最好在allow_if表達式中使用is_anonymous()is_authenticated()自定義函數。

+0

完善它使人們的工作就好了! ' - {path:^/reset-password,allow_if:「is_anonymous()and!is_authenticated()」}' –

相關問題