Ошибка: цепочка фильтров остановлена ​​как: правильный_пользователь отрендерен или перенаправлен - PullRequest
0 голосов
/ 27 марта 2019

Я работаю над обзором приложений. В этом приложении пользователи могут публиковать свой собственный проект и отзыв других пользователей. Но я столкнулся с этой ошибкой, когда другие пользователи пытаются редактировать свои обзоры. Редактировать проект разрешено только владельцам проектов. Но редактировать отзывы следует разрешить пользователям, написавшим свой отзыв.

Как я могу разделить эту аутентификацию?

/controllers/projects_controller.rb

class ProjectsController < ApplicationController
  before_action :signed_in_user, only: [:new, :create, :edit, :update, :destroy]
  before_action :set_project, only: [:show, :edit, :update]
  before_action :correct_user, only: [:edit, :update]

  def edit
  end

  def update
    @project.attributes = create_params
    if @project.save
      redirect_to @project
    else
      render edit_project_path(id: @project.id)
    end
  end

  private

  def signed_in_user
    unless user_signed_in?
      redirect_to root_path
    end
  end

  def set_project
    @project = Project.find_by_id(params[:id])
  end

  def correct_user
    unless current_user.projects.include?(@user)
      redirect_to root_path
    end
  end
end

/controllers/reviews_controller.rb

class ReviewsController < ApplicationController
  before_action :set_projectct, only: [:new, :create, :edit, :update]
  before_action :set_review, only: [:edit, :update, :destroy]
  before_action :correct_user, only: [:edit, :update]

  def edit
  end

  def update
    @review.attributes = create_params
    if @reviews.save
      redirect_to prokect_path(id: @review.project_id)
    else
      redirect_to project_path(id: @review.project_id)
    end
  end

  def set_project
    @project = Project.find_by_id(params[:project_id])
  end

  def set_review
    @review = Review.find_by_id(params[:id])
  end

  def correct_user
    unless current_user.review.include?(@review)
      redirect_to root_path
    end
  end
end

routes.rb

resources :projects do
  resources :reviews
end

1 Ответ

0 голосов
/ 27 марта 2019

Если вы хотите убедиться, что пользователь написал обзор, почему бы не сравнить его следующим образом:

@review.user == current_user

Кстати, это проверка авторизации, поэтому, если у пользователя нет правчтобы отредактировать обзор, вы должны вернуть 403 (Запрещено) вместо перенаправления.

Драгоценные камни, такие как pundit или cancancan, могут помочь вам сделать это правильно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...