1

我目前正在开发一个基于 Symfony 1.4 的项目。我正在使用 sfDoctrineGuardPlugin 来验证我的两种用户:用户和管理员。对于每个模块和模块中的每个操作,我使用凭据来防止执行未经授权的操作。

但是我面临一个问题:例如,如果用户想要编辑项目,则 URL 将类似于frontend.php/project/edit/id/1。在这里,我们假设项目#1 属于他。现在,假设项目#2 不属于他。如果他键入 URL frontend.php/project/edit/id/2,他将有权访问编辑表单,并且将能够编辑不属于他的项目。

我怎样才能防止这种行为?

我想避免在显示编辑表单之前验证每个可编辑模型的所有权......但我可以做不同的事情吗?

你有什么好的做法或建议来防止这种行为吗?

非常感谢 !

4

1 回答 1

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()
    );
  }
}
于 2012-05-20T15:53:37.237 回答