我想要一个过滤器之前像“must_have_permission_to_write”,当被调用时,如果用户没有写权限渲染消息说“你不能这样做!”并返回。rails:在过滤器之前插入和中断
问题是我得到“只能呈现或重定向一次每个动作”当然... 我怎样才能停止执行过滤器之前? 感谢
我想要一个过滤器之前像“must_have_permission_to_write”,当被调用时,如果用户没有写权限渲染消息说“你不能这样做!”并返回。rails:在过滤器之前插入和中断
问题是我得到“只能呈现或重定向一次每个动作”当然... 我怎样才能停止执行过滤器之前? 感谢
我认为最简单的答案就是添加一个重定向并返回false您must_have_permission_to_write
方法。
def must_have_permission_to_write
unless current_user.has_permission?(something)
redirect_to access_denied_path
return false
end
end
然后,创建地方拒绝访问的动作,添加路由,并把任何你想要的模板。
只需添加and return
,像做:
before_filter :must_have_permission_to_write
def must_have_permission_to_write
redirect_to login_path and return unless current_user
end
-1'return'将从方法中返回nil(而不是从它所调用的动作中),它不会执行任何操作。您必须从过滤器方法返回false。另外,请参阅tadman对本答案的回应。 – 2011-04-21 18:13:38
有几件事我注意到了有关的职位在这里:
这个“并返回false”的东西似乎有点危险,可以用作模式。如果redirect_to返回nil,则返回nil。将“返回false”放在单独的行上可能是更好的方法。 – tadman 2009-09-28 17:24:00
良好的通话,在答案 – Ben 2009-09-28 19:22:33
@tadman +1中修复,不幸的是它是一种根深蒂固到“Rails方式”的反模式。我想看到它也会消失。 – 2011-04-21 18:12:01