1

私は現在、Symfony1.4に基づくプロジェクトに取り組んでいます。sfDoctrineGuardPluginを使用して、2種類のユーザー(ユーザーと管理者)を認証しています。各モジュールおよびモジュール内の各アクションについて、不正なアクションの実行を防ぐためにクレデンシャルを使用しています。

しかし、私は問題に直面しています。たとえば、ユーザーがプロジェクトを編集したい場合、URLはfrontend.php / project / edit / id/1のようになります。ここでは、プロジェクト#1が彼のものであると仮定します。ここで、プロジェクト#2が彼のものではないとします。彼がURLfrontend.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 に答える