1

多くのユーザーがいて、各ユーザーには多くの投稿があり、各投稿には多くの写真がある Web サイトを設計しています。ユーザーが新しい投稿を作成するときにアップロードした写真をプレビューできることを願っているので、サブフォームを使用して写真をアップロードすることを提案する答えをここで見つけました。

写真のアップロードには Carrierwaves を使用し、ユーザー インターフェイスには jquery-file-upload を使用しています。モデルは次のとおりです。

class User < ActiveRecord::Base
    has_many :posts, dependent: :destroy
end

class Post < ActiveRecord::Base
    attr_accessible :title, :description, :photo_ids
    belongs_to :user
    has_many :photos, :dependent => :destroy
end

class Photo < ActiveRecord::Base
    mount_uploader :image, ImageUploader
    attr_accessible :image
    belongs_to :post
end

新しい投稿ビューで、通常の投稿フォームの上に jquery-file-upload UI を配置してから、次のようにします。

  1. ユーザーが写真を選択すると、jquery-file-upload api を介して PhotosController にアップロードされます。この写真の post_id は、この段階では nil です。

  2. 写真のアップロードが完了したら、javascript を使用して次のような非表示の入力フォームを追加します。

    input type="hidden" id="collection_image_ids" name="collection[collection_image_ids][]" value=#{写真のID}

  3. ユーザーはステップ 1 と 2 を何度も繰り返してから、投稿を送信できます。

  4. すべてがうまく機能しますが....

誰かがこのリクエストを使用して他のユーザーの写真を自分の投稿に割り当てることができるため、photo_ids の一括割り当てを許可することはお勧めできません。(編集ビューで)参照の回答では、ランダム化されたアクセスキーを使用してセキュリティを向上させることが提案されていましたが、誰かが他のユーザーの投稿にアクセスすると、それらの写真のランダム化されたアクセスキーを取得できますよね?

実装は今のところ安全ではありませんか?

誰かが私にいくつかの提案をしてもらえますか、またはこの問題を処理する適切な方法は何ですか?

4

0 に答える 0