Cas*_*Roy 5 php plugins symfony1 sfguard
我正在开始一个项目,因为我正在使用symfony,我第一次使用symfony,实际上非常棒,我已经安装了sfDoctrineGuardPlugin,一切都很好,直到现在,为什么?,因为前端用户可以在后端登录,反之亦然,我不想要那样,所以,我开始谷歌,我发现Symfony sfDoctrineGuardPlugin自定义登录查询在这里,但我不知道我应该在哪里放置功能所以,我没有测试它.
因为我不希望前端用户可以在后端登录,我想我可以使用凭据,可以吗?但是,symfony在记录后检查用户凭据,我也不想要,所以,我怎么能实现这个?,也许如果我可以在会话中有名称空间,我可以检查后端命名空间中是否有管理员而且对于前端用户来说,我认为他们永远不会得到修复.
我不知道真的知道sfDoctrineGuardPlugin是否有一些可以管理这种情况的配置,存在这样的配置?
另外,在我的后端,我希望有一个页面来管理前端用户,而其他用户则需要后端用户,因为前端用户会有个人资料和地址,认为这样更容易,但我不知道从哪里开始.
需要一些帮助
谢谢
经过几天的编码,我能够完全按照我想要的方式去做,我将分享我的解决方案:
我从我在SO中找到的一个示例开始,您可以在这里阅读这篇文章:
Symfony sfDoctrineGuardPlugin 自定义登录查询
它给了我一个想法,我执行了它,所以,我创建了 \lib\Util.class.php,其中包含函数,一个用于查询后端用户,另一个用于前端用户
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();
}
Run Code Online (Sandbox Code Playgroud)
现在,在app.yml
每个应用程序的中,我覆盖插件的默认查询
#Example for apps/backend/config/app.yml
all:
sf_guard_plugin:
retrieve_by_username_callable: Util::retrieveAdmin
Run Code Online (Sandbox Code Playgroud)
直到现在一切都很好,但我开始面临另一个问题,所以我打开一个新线程:
在 symfony 中覆盖 isAuthenticated(),在那里我得到了解决方案的最后一步,即为每个应用程序设置不同的会话名称,所以,在factories.yml
每个应用程序的:
#apps\backend\config\factories.yml
storage:
class: sfSessionStorage
param:
session_name: backend
Run Code Online (Sandbox Code Playgroud)
现在一切就绪,前端用户无法登录后端应用程序,反之亦然。
请随意发表评论