5

私はプロジェクトを開始し、symfony を使用しています。初めて symfony を使用しましたが、本当に素晴らしいです。既に sfDoctrineGuardPlugin をインストールしており、今まではすべて問題ありませんでした。なぜですか?フロントエンド ユーザーはバックエンドにログインでき、その逆も可能だからです。私はそれを望まないので、私はグーグルを始めました.SOでSymfony sfDoctrineGuardPluginカスタムログインクエリを見つけましたが、関数をどこに配置すればよいかわからないので、テストしていません.

フロントエンドのユーザーがバックエンドにログインできないようにしたいので、資格情報を使用できると思いますか?? しかし、symfony はログに記録された後にユーザーの資格情報をチェックしますが、どちらも望んでいないので、どうすればこれを達成できますか?セッションに名前空間があれば、バックエンドの名前空間に管理者がいるかどうかを確認できますまた、フロントエンドユーザーにとっても、修正されることはないと思います。

sfDoctrineGuardPlugin にこの状況を管理できる構成があるかどうかはわかりませんが、そのような構成が存在しますか??

また、私のバックエンドには、フロントエンド ユーザーを管理するためのページと、バックエンド ユーザー用のその他のページが必要です。フロントエンド ユーザーにはプロファイルとアドレスがあるため、これははるかに簡単だと思いますが、どこから始めればよいかわかりません。 .

ここで助けが必要です

ありがとう

4

2 に答える 2

2

数日間のコーディングの後、私は自分が望んでいたとおりにそれを行うことができました。私は自分のソリューションを共有するつもりです: SO
で 見つけた例から始めました。ここで投稿を読むことができます: Symfony sfDoctrineGuardPlugin custom login query it私にアイデアを与えて実行したので、\lib\Util.class.php を作成し、関数を使用して、1 つはクエリ バックエンド ユーザー用、もう 1 つはフロントエンド ユーザー用です。

static public function retrieveCustomer($username, $isActive = true)
{
    $query = Doctrine_Core::getTable('sfGuardUser')->createQuery('u')
    ->leftJoin('u.Groups g')
    ->leftJoin('g.Permissions p')
    ->where('u.username = ?', $username)
    ->addWhere('u.is_active = ?', $isActive)
    ->addWhere('g.name = ?', 'customers');

    return $query->fetchOne();
}

static public function retrieveAdmin($username, $isActive = true)
{
    $query = Doctrine_Core::getTable('sfGuardUser')->createQuery('u')
    ->leftJoin('u.Groups g')
    ->leftJoin('g.Permissions p')
    ->where('u.username = ?', $username)
    ->addWhere('u.is_active = ?', $isActive)
    ->whereIn('g.name', array('administrators','operators'));

    return $query->fetchOne();
}  

さて、app.yml各アプリの中で、プラグインのデフォルトのクエリを上書きします

#Example for apps/backend/config/app.yml
all:
    sf_guard_plugin:
        retrieve_by_username_callable: Util::retrieveAdmin

今まではすべて問題ありませんでしたが、別の問題に直面し始めたので、新しいスレッドを開きます: symfony で isAuthenticated() を上書きすると、ソリューションの最終ステップが得られました。それは、各アプリに異なるセッション名を設定することでした。factories.yml各アプリ の

#apps\backend\config\factories.yml
storage:
  class: sfSessionStorage
  param:
    session_name: backend

これですべてが設定され、フロントエンド ユーザーはバックエンド アプリにログインできなくなり、その逆も同様です。

お気軽にコメント

于 2011-04-12T13:46:19.547 に答える
0

最も一般的なアプローチは資格情報によるもので、私のbackendアプリケーションsecurity.ymlは次のようになります。

all:
  is_secure: on
  credentials: [login_backend]
于 2011-04-04T17:55:57.183 に答える