rails タスク管理アプリにおける、他のユーザーの投稿へのアクセス制限
解決したいこと
ここに解決したい内容を記載してください。
Ruby on Railsでタスク管理アプリを作成しました。
そこで発生した問題が、「ログインしているユーザーとは別のユーザーが作成したタスクを更新・削除できてしまう」というものです。
こちらを「そのタスクの詳細ページへの遷移、編集、更新、削除を行おうとした場合はトップページへリダイレクトされる」ようにしたいです。
発生している問題・エラー
タスクのコントローラーファイルに
before_action :correct_user, only: [:show,:edit]
に加えて「:update,:destroy」を追加し動作確認を行おうとしたが、どのようにしてほかのユーザーのタスクに対しての更新、削除のテストを行うのか分からない。
showとeditに関してはURLを直接入力しアクセスするとそのページへ移行しようとし正常にリダイレクトされるが、更新と削除の場合はどうすればいいのか分からない。
現状はとりあえず、showとeditのみ記述しております。
該当するソースコード
ソースコードを入力
class TasksController < ApplicationController
before_action :require_user_logged_in
before_action :correct_user, only: [:show,:edit]
def index
@tasks = current_user.tasks.all
end
def show
@task = Task.find(params[:id])
end
def new
@task = Task.new
end
def create
@task = current_user.tasks.build(task_params)
if @task.save
flash[:success] = 'タスクが正常に作成されました'
redirect_to @task
else
flash.now[:danger] = 'タスクが作成されませんでした'
render :new
end
end
def edit
@task = Task.find(params[:id])
end
def update
@task = Task.find(params[:id])
if @task.update(task_params)
flash[:success] = 'タスクは正常に更新されました'
redirect_to @task
else
flash.now[:danger] = 'タスクは更新されませんでした'
render :edit
end
end
def destroy
@task = Task.find(params[:id])
@task.destroy
flash[:success] = "タスクは正常に削除されました"
redirect_to tasks_url
end
private
# Strong Parameter
def task_params
params.require(:task).permit(:content, :status)
end
def correct_user
@task = current_user.tasks.find_by(id: params[:id])
unless @task
redirect_to root_url
end
end
end