✏️
Rails 他人の編集画面に遷移しないようにする
どういう状況?
他人が投稿したデータを直接URLを打ち込むと、本人でなくても編集できてしまう状況。
これは非常にまずい...
実装方法
対象のコントローラーに以下のコードを入力する。
contoller.rb
class BooksController < ApplicationController
before_action :correct_user, only: [:edit, :update]
:
:
private
def correct_user
@book = Book.find(params[:id])
@user = @book.user
redirect_to(books_path) unless @user == current_user
end
end
【解説】
○before_action
→各アクションが実行される前に呼ばれる。今回はedit、updateアクション。
○def correct_user
の部分
→correct userについてストロングパラメーターの下で定義する。
①@book = Book.find(params[:id])
でidのついた本を1つ選ぶ。
②@user = @book.user
で①で選んだ本をもってるUserであると定義(Userモデルと関連付け)
③redirect_to(books_path) unless @user == current_user
定義したuserと現在ログインしているuserが一致していなければ、一覧ページにリダイレクト
参考文献
Discussion