Ruby on Rails 2.3.8:是否有一种方法可以使每个控制器的destroy操作仅在满足条件时发生?



目前,在我的应用程序中,我发现如果你拦截一个即将执行删除命令的数据包,你可以将ID更改为任何ID,并且该对象将被删除,无论它是否属于制作它的人。

所以,我的问题是,是否有一种方法可以以某种方式对destroy/delete工作方式进行全局修改,使current_user必须拥有即将被删除的项目(或任何其他条件,因为许多应用程序比简单的用户所有权更复杂)

为destroy动作编写全局规则不是一个好主意。最简单的方法就是在控制器中检查访问权限:

class MyController < ApplicationController
  before_filter :access, :only => [:edit, :update, :destroy]
  ...
  private
  def access
    my_object = MyObject.find(params[:id])
    unless logged_in? && my_object.user == current_user
      render :template => "/error/401.html.erb", :status => 401
    end
  end
end

你还应该查看CanCan gem

最新更新