rails:过滤前放入和中断

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

问题是我得到“每个动作只能呈现或重定向一次”当然……我如何在filter中停止执行? 谢谢

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

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

关于post,我注意到了一些事情:

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

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