3

我想要一个像“must_have_permission_to_write”这样的前置过滤器,当用户无权写入时调用它会呈现一条消息,说“你不能这样做!” 并返回。

问题是我得到“每个动作只能渲染或重定向一次”当然......我怎样才能停止前过滤器中的执行?谢谢

4

3 回答 3

3

我认为最简单的答案是添加重定向并返回 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

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

于 2009-09-28T16:55:55.167 回答
0

我注意到这里的帖子有几点:

  • 在前置过滤器中调用渲染或重定向将取消该操作。Rails 有一段时间没有这样做,但据我所知,现在这是自动的。网上找不到相关的参考资料,如有错误请大家指正。
  • 如果您实际上在动作中,使用“并返回”是取消动作的好方法。在上面的示例中,方法被定义为一个前置过滤器(即单独的方法),在方法的末尾调用“并返回”,并不是那么有用。
  • 我认为您不应该告诉某人“您不能那样做”,这不是一种非常安全的做法。如果有人要求他们没有权限的东西,响应应该是 404。通过这样的响应,你给这个“好奇”的人太多的信息。
于 2011-04-21T18:05:12.067 回答
-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
于 2009-09-28T16:55:51.787 回答