symfonyによって生成されたCRUD関数があります。記事クラスと記事所有者がいます。現在の記事の所有者以外のユーザーが編集するのを防ぎたいです。私は自分のフィルターまたはバリデーターをカスタム化することを考えていましたが、バリデーターを実装するときに、一部のユーザーは編集フォームに入ることができます(送信するだけではありませんでした)。しかし、ユーザーフィルターを実装すると、一部のアクション(この場合は編集)の前にのみフィルターを実行させるという問題が発生します。
どうすればいいですか?
symfonyによって生成されたCRUD関数があります。記事クラスと記事所有者がいます。現在の記事の所有者以外のユーザーが編集するのを防ぎたいです。私は自分のフィルターまたはバリデーターをカスタム化することを考えていましたが、バリデーターを実装するときに、一部のユーザーは編集フォームに入ることができます(送信するだけではありませんでした)。しかし、ユーザーフィルターを実装すると、一部のアクション(この場合は編集)の前にのみフィルターを実行させるという問題が発生します。
どうすればいいですか?
これは内蔵されていると思います。security.ymlファイルについて読む必要があります。
更新: なるほど...セキュリティ システムがユーザー オブジェクトのメソッドを呼び出しているhasCredential()
ようです。カスタム ユーザー クラスでこのメソッドを拡張して、そのパラメータがたとえば「article_owner」の場合に特別なチェックを行うようにすることもできます。
これが完了したら、必要なアクションに対してこの資格情報を指定するだけです。
symfony がすぐに使えるオブジェクトレベルのアクセス制御をサポートしているとは思いません。私のアプリケーションの1つでその特定の問題が発生し、ログインしたユーザーが編集アクションの所有者と一致するかどうかを明示的にチェックすることになりました。これは私がそのために使用した関数です:
protected function hasObjectAccess($obj) {
if ($this->getUser()->hasGroup('admin')
|| $obj->getOwnerId() == $this->getUser()->getId()))) {
return true;
}
return false;
}