首页 > 解决方案 > 如何使用 devise gem 停止 Rails 应用程序中的 url 操作?

问题描述

我正在使用设计 gem 来处理用户。users 与项目有 one_to_many 关联。并且有多个用户,每个用户都有自己的仪表板,但用户仍然可以在 url 中操作 project_id 并能够查看其他用户的项目,还可以编辑删除它。我怎么能阻止呢?

登录后的用户重定向 (project#index) -

项目控制器.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

标签: ruby-on-railsdevise

解决方案


您可以简单地使用current_user.projects作用域show

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

这样,如果您编辑 URL 并输入属于另一个用户的 ID,您将得到ActiveRecord::RecordNotFound,默认情况下 Rails 将其处理为 404 错误。

当然,您也可以使用这种方法来保护和edit操作。updatedestroy


推荐阅读