ユーザーが User モデルと Photo モデルの属性を編集できるフォームを使用しています。ユーザーモデルには多くの写真があります。
ユーザーがフォームを送信すると、params は次のようになります。
:user => { :name => "blah blah",
:photos_attributes => {
"1" => { "id" => 10, "description" => "Some description"}
}
}
current_user.update_attributes(params[:user])
コントローラーでa を実行します。
すべてが正常に機能しています。ただし、アクションに対して行われる承認はありません。これにより、セキュリティ ホールが残ります。ユーザーは、フォーム投稿で (photo_attribtues で) 渡された ID を変更するだけで、自分の意志の写真を変更できます。
現在のユーザーが CanCan を使用して photo_attributes で指定された写真を変更する権限を持っているかどうか (つまり、彼が所有者であるかどうか) を確認するにはどうすればよいですか。
注: photos_attributes はオプションです。パラメータには、photos_attributes が含まれる場合と含まれない場合があります。params[:user] に photos_attributes がない場合、ソリューションは失敗しません。