rails:过滤前放入和中断

时间:2009-09-28 16:13:36

标签: ruby-on-rails ruby authorization render before-filter

我想要一个像“must_have_permission_to_write”这样的前过滤器,如果用户没有写入权限,则在调用时会显示一条消息“你不能这样做!”并返回。

我遇到的问题是“每次行动只能渲染或重定向一次”当然...... 如何在过滤器中停止执行? 感谢

3 个答案:

答案 0 :(得分:3)

我认为最简单的答案是添加重定向并向您的must_have_permission_to_write方法返回false。

def must_have_permission_to_write
  unless current_user.has_permission?(something)
    redirect_to access_denied_path 
    return false
  end
end

然后,在某处创建一个拒绝访问的操作,添加路径,并在模板中放置您想要的任何内容。

答案 1 :(得分:0)

我注意到这里有一些关于帖子的事情:

  • 在过滤器中调用渲染或重定向将取消操作。有一点当rails没有这样做,但据我所知,现在这是自动的。我似乎无法在网上找到这个参考,如果我错了,有人请纠正我。
  • 使用“和返回”是取消操作的好方法,如果您实际上在操作中。在上面的例子中,方法被定义为在方法结束时调用“并返回”的前过滤器(即单独的方法),并没有那么有用。
  • 我认为你不应该告诉别人“你不能这样做”,这不是一个非常安全的做法。如果有人要求他们没有许可的东西,那么回复应该是404.通过这样回答,你给这个“好奇”的人太多的信息。

答案 2 :(得分:-1)

只需添加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