2016-12-14 37 views
0

我試圖模仿Symfony中的不同用戶,但不同的是,其他示例如Symfony impersonation - separate firewalls and separate user providers,在我的情況下,不僅是提供者是不同的,但主機。symfony模仿跨不同的主機

firewalls: 
    admin: 
     pattern: ^/ 
     host: "%host_admin%" 
     provider: admin 
[...] 
     switch_user: 
     role: ROLE_ADMIN 
     provider: client 
     #host: "%host_public%" <-- tried this.. does not work 
     context: cmb_context 

    client: 
     pattern: ^/ 
     host: "%host_public%" 
     provider: client 
[...] 
     switch_user: 
     role: ROLE_ADMIN 
     provider: client 
     context: cmb_context 

因此,與當我嘗試模擬用戶的這種設置,它仍然在管理網站及課程的客戶端,這是正確回升,在管理方無法驗證。當移動到客戶端時,auth會話當然不存在。

我試着讓系統主機知道在哪裏冒充「in」而沒有運氣。

我可能不得不倒在http://symfony.com/doc/current/security/impersonating_user.html#events提到的聽衆,但我還沒有找到有關如何做到這一點的細節。

任何想法?提前致謝。

回答

0

chainUserProvider允許您將一個或多個用戶提供者添加到一起,以便您可以從這些來源中提取用戶。請注意,向ChainUserProvider添加提供程序的順序很重要:一旦找到用戶,即使該用戶的憑據失敗,它也會檢查該用戶。

parameters: 
    chain_providers: "mydatabase1,mydatabase2" 

security: 
    providers: 
     mydatabase1: 
      entity: 
       class: My\UserBundle\Entity\Admin 
       property: username 

     mydatabase2: 
      entity: 
       class: My\UserBundle\Entity\Customer 
       property: username 

     my_chain: 
      chain: 
       providers: %chain_providers% 
+0

謝謝@Mohamed給你回答。我遇到的問題是無法將實體數據拉到防火牆中,我甚至可以在頁面底部的symfony dev-bar(其他公共實體之一)中看到正確的用戶名。但能夠在不同的主機上記錄這個相同的實體(最初我在管理員主機中,我想在客戶端主機中登錄爲客戶端)... – rrubiorr81