2014-11-21 66 views
0

我在設置Symfony 2的安全性時遇到了一些問題。 我現在有這在我的security.yml多個提供商,多個防火牆和多個主機的Symfony 2安全問題

security: 
encoders: 
    Acme\AdminBundle\Entity\AdminUsers: 
     algorithm: bcrypt 
    Acme\UserBundle\Entity\Users: 
     algorithm: bcrypt 

role_hierarchy: 
    ROLE_USER:  ROLE_USER 
    ROLE_ADMIN:  ROLE_USER 
    ROLE_SUPER_ADMIN: [ ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ] 

providers: 
    provider_admin: 
     entity: { class: AdminBundle:AdminUsers, property: username } 
    provider_user: 
     entity: { class: UserBundle:Users, property: username } 

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

    login: 
     pattern: ^/login$ 
     security: false 
     anonymous: ~ 

    recover: 
     pattern: ^/(recover-password|generate-hash)$ 
     security: false 
     anonymous: ~ 

    secured_area: 
     pattern: ^/ 
     provider: provider_admin 
     host: admin.example.dev 
     form_login: 
      check_path: /login_check 
      login_path: /login 
      always_use_default_target_path: false 
      default_target_path:/
      username_parameter: _username 
      password_parameter: _password 
     logout: 
      path: /logout 
      target:/
     anonymous: ~ 

    public_secured_area: 
     pattern: ^/dashboard 
     host: app.example.dev 
     provider: provider_user 
     form_login: 
      check_path: /dashboard/login_check 
      login_path: /login 
      always_use_default_target_path: false 
      default_target_path: /dashboard 
      username_parameter: _username 
      password_parameter: _password 
     logout: 
      path: /public/logout 
      target: /login 
     anonymous: ~ 

access_control: 
    - { path: ^/dashboard/*, roles: ROLE_USER } 
    - { path: ^/*, roles: ROLE_ADMIN } 

正如你所看到的,我有2個不同的供應商,2個不同的防火牆和2個不同的主機。 這是因爲我需要從app.example.dev上的Users表和admin.example.dev上的AdminUsers表中的用戶登錄用戶。

這是我在我的管理的routing.yml:

login: 
    path: /login 
    host: admin.example.dev 
    defaults: { _controller: UserBundle:Security:login } 
login_check: 
    path: /login_check 
    host: admin.example.dev 
logout: 
    path: /logout 
    host: admin.example.dev 

而這就是我在我的應用的routing.yml

public_login: 
    path: /login 
    host: app.example.dev 
    defaults: { _controller: PublicBundle:Default:login } 

public_login_check: 
    path: /dashboard/login_check 
    host: app.example.dev 

public_logout: 
    path: /dashboard/logout 
    host: app.example.dev 

事情是這樣的設置現在一切工作正常在管理端。 在應用程序方面的註銷不起作用,它說:

Unable to find the controller for path "/dashboard/logout". Maybe you forgot to add the matching route in your routing configuration? 
404 Not Found - NotFoundHttpException 

他們似乎以類似的方式設置,但這種情況的解決方案是爲我設置在應用的實際控制人。註銷路由,添加註銷操作與實際註銷並重定向代碼爲此工作。 這告訴我什麼是錯的。任何想法是什麼?

也是因爲我在security.yml文件的access_control部分中的2個條目被反轉,直到我再次閱讀文檔並且我明白那裏的路徑需要從列表中特別是一般。

所以我的第二個問題是關於這個問題:有沒有辦法將Access_control條目綁定到某個防火牆或至少是一個主機?

編輯: 雖然我得到了答案,但請參閱下面的內容,但我仍想了解我的最後一個問題,即上面的2段是否是有效的。

謝謝。

回答

1

變化public_secured_area防火牆這樣的:

public_secured_area: 
    ... 
    logout: 
     path: /dashboard/logout 
     target: /login 
    anonymous: ~ 

或更改應用程序路徑是這樣的:

public_logout: 
    path: /public/logout 
    host: app.example.dev 

兩個路線和退出路徑應該是一樣的..

+0

是的,你是對的更令人討厭的是我知道註銷路線需要在防火牆後面,但顯然儘管花了30分鐘來解決這個問題,我錯過了錯誤的註銷路徑n security.yml。過去幾天我改變了很多東西,導致我忘記了這個/公共網址。謝謝。 – cbaltatescu 2014-11-24 12:09:41