ruby on rails -有两个任务调用相同的操作,并且希望只有一个被限制为current_user的问题



我允许用户编辑他们的视频并为视频添加标签。由于我将添加标签设置为视频显示视图中的虚拟属性,因此两个任务都命中了相同的控制器方法,即videos_controller update方法:

  def update
    @video = current_user.videos.find(params[:id])
    respond_to do |format|
      if @video.update_attributes(params[:video])
        format.html { redirect_to(@video) }
        format.js
      else
        format.html { render :action => "edit" }
      end
    end
  end

问题是,我只希望视频的所有者能够编辑自己的视频,而我希望任何用户都可以更新标签。是否有可能做到这一点,当两个任务击中相同的行动,或者我需要重组我的应用程序?如果有,怎么做?

我在IRC中修复了您的问题。把分数给我,不然我在别的地方取笑你。

首先,您需要确保在浏览器中阻止此操作。如果一个用户能够编辑内容,然后得到一个错误,这会让他感到困惑,因为他不是所有者。

其次,为了保护自己不被篡改,你需要在你的控制器中做这样的事情:
def update
  @video = current_user.videos.find(params[:id])
  video_params = params[:video]
  unless current_user = @video.user_id
    # strip out all harmful parameters
    # this is an example, as i don know 
    video_params.delete(:file_name)
    # maybe here you should do some check if there is anything left?
    # to generate an appropriate error?
  end
  respond_to do |format|
    if @video.update_attributes(video_params)
      format.html { redirect_to(@video) }
      format.js
    else
      format.html { render :action => "edit" }
    end
  end
end

相关内容

  • 没有找到相关文章

最新更新