2016-12-14 5 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 

だから、私はユーザーを偽装しようとするこのセットアップでは、管理者側で認証できない、それは正確にピックアップされています、クライアント管理サイトで、そしてもちろんのまま。もちろん、クライアントに移動するときは、認証セッションは存在しません。

私はシステムのホストを入れて、どこに運がないのかを "偽装"する場所を知ろうとしました。

私はhttp://symfony.com/doc/current/security/impersonating_user.html#eventsに記載されているリスナーに落ちなければならないかもしれませんが、それを行う方法の詳細は見つかりませんでした。

アイデア?前もって感謝します。

答えて

0

chainUserProviderを使用すると、1つ以上のユーザープロバイダを追加して、複数のソースからユーザーを取得できます。 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

ありがとうございます@モハメド答えます。私が持っている問題は、ファイアウォールでエンティティデータを取得することができないため、ページ下部(他のパブリックエンティティの1つ)のsymfony dev-barに正しいユーザ名がロードされていることがわかります。私は管理ホストにいて、私はクライアントホストにクライアントとしてログに記録したいと思っています)... – rrubiorr81

関連する問題