3

symfony sfDoctrineGuardPluginを使用して、フロントエンドユーザとバックエンドユーザの両方の認証を管理します。フロントエンドユーザーがバックエンドアプリにログインできるようにしたくないことを除いて、問題ありません。資格情報をセットアップできますが、ユーザーが認証された後に資格情報が確認されます。私が望むのは、バックエンドグループにないユーザーのために決して検証しないように、siginをフォームに入れることです。これどうやってするの?symfony sfDoctrineGuardPluginカスタムログインクエリ

答えて

2

私はより良い解決策を見つけたと思います。 sfDoctrineGuardプラグインには、ユーザーの再取得のためのオプションの呼び出し可能性をチェックする独自のポストバリデーターがあります。

//app.yml 
all: 
    sf_guard_plugin: 
    retrieve_by_username_callable: sfGuardUser::getForBackend 

//sfGuardUser.class.php 

    public static function getForBackend($username) 
    { 
    $query = Doctrine::getTable('sfGuardUser')->createQuery('u') 
     ->leftJoin('u.Groups g') 
     ->leftJoin('g.Permissions p') 
     ->where('u.username = ? OR u.email_address = ?', array($username, $username)) 
     ->addWhere('u.is_active = ?', true) 
     ->addWhere('p.name = ?', 'backend'); 

    return $query->fetchOne(); 
    } 
+0

@Dziamid、私は同じことをしようとしていますが、どこにこの関数を置くべきですか? –

0

ここに1つのアイデアがあります。ログインフォーム用のカスタムポストバリデーターを作成することができます。ここでは、Googleの結果があります:このバリデータで

http://www.symfony-project.org/blog/2008/09/05/call-the-expert-how-to-implement-a-conditional-validator

は、ユーザーが問題になっているグループに属しているかどうかをチェックし、それに応じてエラーを投げることができました。ユーザーは認証されません。

0

私はあなただけ追加する必要が思う:

storage: 
    class: sfSessionStorage 
    param: 
     session_name: sf_backend 

をごbackend/config/factories.yml の終わりに、デフォルト、symfonyの共有セッションクッキーで、この溶液を用いて、symfonyはこのクッキーを分けます。

関連する問題