经过几天的编码,我能够完全按照自己的意愿进行操作,我将分享我的解决方案:我从我在SO
中
找到的示例开始,您可以在此处阅读帖子:Symfony sfDoctrineGuardPlugin custom login query
it给了我一个想法,我执行了它,所以,我创建了 \lib\Util.class.php,带有 to 函数,一个用于查询后端用户,另一个用于前端用户
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
直到现在一切都很好,但我开始面临另一个问题,所以我打开了一个新线程:
Overwriting isAuthenticated() in symfony并且我得到了解决方案的最后一步,即为每个应用程序设置不同的会话名称,所以,在factories.yml
每个应用程序中:
#apps\backend\config\factories.yml
storage:
class: sfSessionStorage
param:
session_name: backend
现在一切都设置好了,前端用户无法登录后端应用程序,反之亦然。
随时发表评论