目前,在我的应用程序中,我发现如果你拦截一个即将执行删除命令的数据包,你可以将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