Как остановить URL-манипуляции в приложении рельсы с Devise Gem? - PullRequest
0 голосов
/ 11 марта 2020

Я использую Gem Devise для обработки пользователя. У пользователей есть одно связанное с проектами. и существует несколько пользователей, каждый из которых имеет свою собственную панель мониторинга, но все же пользователь может манипулировать идентификатором project_id в URL и видеть проект других пользователей, а также редактировать и удалять его. как я могу это остановить?

перенаправление пользователя после входа в систему (индекс # проекта) -

project_controller.rb

def index
    @projects = current_user.projects.all.order("created_at DESC").paginate(page: params[:page], per_page: 15)
  end

  def show

    @project = Project.includes(stages: {tasks:}).find(params[:id])
    @stages = @project.stages
  end

  def new
    @project = current_user.projects.build
  end

  def create
    @project = current_user.projects.build(project_params)

    respond_to do |format|
      if @project.save
        format.html { redirect_to projects_url, notice: 'Project was successfully created.' }
        format.json { render :show, status: :created, location: @project }
      else
        format.html { render :new }
        format.json { render json: @project.errors, status: :unprocessable_entity }
      end
    end
  end

1 Ответ

1 голос
/ 11 марта 2020

Вы можете просто использовать current_user.projects scope в show action:

def show
  @project = current_user.projects.includes(stages: :tasks).find(params[:id])
end

Таким образом, если вы отредактируете URL и добавите ID, принадлежащий другому пользователю, вы получите ActiveRecord::RecordNotFound, что Rails по умолчанию обрабатывает ошибку 404.

Конечно, этот подход можно использовать и для защиты действий edit, update и destroy.

...