✏️

Rails 他人の編集画面に遷移しないようにする

2023/08/03に公開

どういう状況?

他人が投稿したデータを直接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が一致していなければ、一覧ページにリダイレクト

参考文献

https://qiita.com/nao0725/items/47606b8975603a12fd5e

Discussion