数日間のコーディングの後、私は自分が望んでいたとおりにそれを行うことができました。私は自分のソリューションを共有するつもりです: 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
これですべてが設定され、フロントエンド ユーザーはバックエンド アプリにログインできなくなり、その逆も同様です。
お気軽にコメント