我目前正在开发一个基于Symfony 1.4的项目。我使用sfDoctrineGuardPlugin来验证我的两种用户:用户和管理员。对于模块中的每个模块和每个操作,我使用凭据来防止未经授权的操作执行。
但是我遇到了一个问题:例如,如果用户想要编辑项目,则URL将类似于 frontend.php / project / edit / id / 1 。在这里,我们假设项目#1属于他。现在,让我们假设项目#2不属于他。如果他键入URL frontend.php / project / edit / id / 2 ,他将可以访问编辑表单,并且能够编辑不属于他的项目。
我该如何防止这种行为?
我希望在显示编辑表单之前避免验证每个可编辑模型的所有权......但我可以采取不同的方式吗?
您是否有任何良好做法或建议来阻止此行为?
非常感谢!
答案 0 :(得分:1)
由于您必须检查项目以了解当前用户是否可以编辑项目,因此我认为除了在编辑之前验证之外,您还有其他方法。你为什么不想这样做?
此检查可在preExcute函数内完成:
public function preExecute()
{
$request = $this->getRequest()
if ($request->hasParameter('id'))
{
$project = Doctrine_Core::getTable('Project')->find($request->getParameter('id'));
$user_id = $this->getUser()->getGuardUser()->getId();
$this->forward404If(
$project->getUserId() !== $user_id,
'User #'.$user_id.' is not allowed to edit project #'.$project->getId()
);
}
}