2012-03-10 108 views
4

我遇到了symfony 2安全組件的一個有線問題。由於{{ app.user }}對象僅在安全區域內可用,因此我將防火牆模式設置爲^/。現在我想「解密」一些頁面,比如註冊。我試過使用access_control,但它不起作用。Symfony 2 - 防火牆和訪問控制問題

這裏是我的security.yml

firewalls: 
    dev: 
     pattern: ^/(_(profiler|wdt)|css|images|js)/ 
     security: false 

    login: 
     pattern: ^/account/login$ 
     security: false 

    account_area: 
     pattern: ^/ 
     form_login: 
      check_path: /account/login_check 
      login_path: /account/login 
      default_target_path: /account 
     remember_me: 
      key:  blaBlubKey 
      lifetime: 3600 
      path: /
      domain: ~ 
     logout: 
      path: /account/logout 
      target:/

access_control: 
    #works 
    - { path: ^/backend, roles: ROLE_USER } 
    #works not 
    - { path: ^/registration, roles: IS_AUTHENTICATED_ANONYMOUSLY } 

提前感謝!

回答

4

使用anynymous指令在account_area:

account_area: 
     pattern: ^/ 
     anonymous: ~ 
+0

:TRUE' – Frido 2012-05-15 11:28:14

10

值得一提的是,這裏最好的做法是隻使用一個防火牆ACCESS_CONTROL的登錄頁面。爲什麼?如果登錄的用戶嘗試訪問/登錄頁面,你會做什麼?您將無法檢查控制器是否經過身份驗證並重定向他,因爲用戶將通過主防火牆進行身份驗證,但不會登錄到登錄防火牆,因爲他們是單獨的安全系統。

這裏是我的偉大工程的security.yml:我用'匿名

security: 
    firewalls: 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: true 
      anonymous: ~ 
     secured_area: 
      pattern: ^/ 
      anonymous: ~ 
      form_login: 
       login_path: /login 
       check_path: /login_check 
       always_use_default_target_path: true 
       default_target_path:/
      logout: 
       path: /logout 
       target:/
    providers: 
     main: 
      entity: { class: Core\UserBundle\Entity\User, property: username } 
    access_control: 
     - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/admin, roles: ROLE_SUPERADMIN } 
     - { path: ^/user, roles: ROLE_USER } 
     - { path: ^/, roles: IS_AUTHENTICATED_FULLY } 
+1

好樣的!這就是我的想法,我得到一個確認! – gremo 2012-08-05 11:56:35

+0

在我的安全區域中添加「anonymous:〜」是我需要這個工作 - 謝謝! – Jessica 2013-10-09 15:24:24