超基本 CRUDで他人の投稿の編集・更新を防ぐコントローラーでの注意点
September 22, 2020
こんちには、たわらです。
ポートフォリオを作成していて、一段落したので講師のかたに簡単にコードを見てもらったのですが、超基本的なところの理解ができていなかったので、反省をこめてメモを残しておきます。
編集・更新は投稿した本人のみができるようでなければならないのです。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
かつて学習した超基本が身についてないとショックを受けますが、恥はかきすて、と考えて素直に復習しようっと。