2016-01-18 74 views
1

我遇到了一個奇怪的問題。我有以下security.yml:Symfony安全:即使用戶不匹配角色,也不需要身份驗證

security: 
    encoders: 
     Symfony\Component\Security\Core\User\User: plaintext 

    role_hierarchy: 
     ROLE_USER: 
     ROLE_EDITOR:  [ROLE_USER] 
     ROLE_ADMIN:  [ROLE_USER, ROLE_EDITOR] 

    providers: 
     in_memory: 
      memory: 
       users: 
        admin: { password: 123456, roles: [ 'ROLE_ADMIN' ] } 
        editor: { password: 123456, roles: [ 'ROLE_EDITOR' ] } 

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

     backend: 
      pattern: ^/backend 
      anonymous: ~ 
      provider: in_memory 
      form_login: 
       login_path: backend_login 
       check_path: backend_login_check 

    access_control: 
     - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY, host: example\.com$ } 
     - { path: ^/backend_login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/backend, roles: ROLE_ADMIN } 
     - { path: ^/user/fetch, roles: ROLE_USER } 
     - { path: ^/level, roles: ROLE_USER } 
     - { path: ^/gallery, roles: ROLE_USER } 

我有一個窗口開發機器與XAMPP運行,一切正常。我可以登錄到後端,如果我沒有登錄並嘗試打開後端路由,我將被重定向到登錄頁面。

這是我的迂迴部分:

backend_login: 
    pattern: /backend_login 
    defaults: { _controller: FooBackendBundle:Security:login } 

backend_login_check: 
    pattern: /backend/login_check 

但是當我上傳到我的集成Linux服務器,我可以打開後臺,而無需登錄它看起來像Symfony的不關心。當前用戶具有的角色。

代碼和symfony版本都是完全相同的(Symfony 2.3)。

如果我從後端防火牆中刪除anonymous: ~部分,它將重定向到登錄頁面,但也會創建一個無意的重定向循環。

有沒有人有一個想法如何解決這個問題?

回答

1

Symfony documentation

對於每個到來的請求,Symfony的檢查每個ACCESS_CONTROL條目要找到一個當前請求相匹配。一旦找到匹配的access_control條目,它就會停止 - 只有第一個匹配的access_control用於強制訪問。

當您在您的安全配置中設置access_control時,您希望將限制最少的匹配放在最後。在你的情況下,你將永遠匹配第一種模式,因爲所有路線匹配^/,因此不需要任何驗證。更改access_control這個:

access_control: 
    - { path: ^/backend_login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/backend, roles: ROLE_ADMIN } 
    - { path: ^/user/fetch, roles: ROLE_USER } 
    - { path: ^/level, roles: ROLE_USER } 
    - { path: ^/gallery, roles: ROLE_USER } 
    - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY } 

我刪除了host參數,因爲它似乎並不相關。

相關問題