tawara's blog

雑記。個人の見解です。

超基本 CRUDで他人の投稿の編集・更新を防ぐコントローラーでの注意点

こんちには、たわらです。

ポートフォリオを作成していて、一段落したので講師のかたに簡単にコードを見てもらったのですが、超基本的なところの理解ができていなかったので、反省をこめてメモを残しておきます。

編集・更新は投稿した本人のみができるようでなければならないのです。current_userに紐付いている投稿群から検索するようにコードを書きます。 current_user.postsとするところがポイントです。

  # ユーザー全員がアクセスしてよい
  def show
    @post = Post.find(params[:id])
  end
  
  
  ########## Bad ##########
  # これだとposts/18/editの数字の部分を改ざんすれば他人の投稿を編集・更新できる
  def edit
    @post = Post.find(params[:id])
  end
  
  def update
    @post = Post.find(params[:id])
    # 必要な処理
  end

 ########## Good ##########
 # これだと現在のユーザーの投稿から検索するので他人の投稿へのアクセスを防げる
  def edit
    @post = current_user.posts.find(params[:id])
  end
  
  def update
    @post = current_user.posts.find(params[:id])
    # 必要な処理
  end

かつて学習した超基本が身についてないとショックを受けますが、恥はかきすて、と考えて素直に復習しようっと。