tn-soccerball
@tn-soccerball

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

ログイン空に他のユーザーが直接アクセスすることなできないようにするには

class TasksController < ApplicationController

    before_action :require_user_logged_in
    before_action :correct_user, only: [:destroy, :show]


    def index
       #@tasks = Task.all
       @tasks = current_user.tasks.order(id: :desc).page(params[:page])
    end


    def show
        @task = Task.find(params[:id])
        redirect_back(fallback_location: root_path)
    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 
            @tasks = current_user.tasks.order(id: :desc).page(params[:page])
            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


二つ目のbefore_action に他のユーザーがCRUD操作できないようにしたいのですが、まだ何か足りないようなんですが、editお追加してみたら修正ができなくなり、ほかのを追加しても何が正解か分からないので、ご協力をお願いいたします。

0

1Answer

    def edit
        @task = Task.find(params[:id])
    end

これは,current_user を使っていないので,どのユーザのものも対象にできてしまいそうです.
current_user.tasks.find(params[:id])などを使って,current_usertasks のみを対象にするのはどうでしょうか?

0Like

Comments

  1. @tn-soccerball

    Questioner

    なるほどですね!
    そしてそれをしたらbefore_actionにeditを追加しなくてはですよね?
  2. そうですね.その部分の処理が含まれてしまうので,不要になりそうです.

Your answer might help someone💌