バージョン
・ruby 2.5.7
・Rails 5.2.4.3
編集、削除の権限を投稿者だけにしたい
CRUD処理は出来た!
けど、このままだと全ての投稿を編集や削除が出来てしまう状態。
編集、削除の権限を投稿者だけの機能にしたい。
tasks_controller.rb
class TasksController < ApplicationController
def index
@tasks = Task.all
end
def new
@task = Task.new
end
def create
Task.create(task_params)
end
def show
@task = Task.find(params[:id])
end
def edit
@task = Task.find(params[:id])
end
def destroy
task = Task.find(params[:id])
task.delete
end
def update
task = Task.find(params[:id])
task.update(task_params)
end
private
def task_params
params.require(:task).permit(:title, :content)
end
end
ユーザーの投稿を守る為に下記のメソッドを使う
unlessはもし〜でなかったらと言う意味。下記でいうと、
もし受け取ったユーザーのIDが、ログインしているユーザー(current_user)のIDと一致しなければ
処理を実行せずリダイレクトで戻しますよっていう意味です。
tasks_controller.rb
private
def task_params
params.require(:task).permit(:title, :content)
end
##以下を追加
def baria_user
unless Task.find(params[:id]).user.id.to_i == current_user.id
redirect_to tasks_path(current_user)
end
end
end
##before_actionでメソッドを呼び出して、完成!!!
before_actionはコントローラーの全てのアクションが実行される前に実行されるものです。
今回は編集と削除のみの場合で行いたいので、editとupdateとdestroyのみにしています。
tasks_controller.rb
class TasksController < ApplicationController
before_action :baria_user, only: [:edit, :destroy, :update]
def index
@tasks = Task.all
end