【发布时间】:2026-02-03 10:45:01
【问题描述】:
我想要一个像“must_have_permission_to_write”这样的前置过滤器,当用户没有写入权限时调用它会呈现一条消息,说“你不能这样做!”然后返回。
问题是我得到“每个动作只能渲染或重定向一次”当然...... 如何在 before 过滤器中停止执行? 谢谢
【问题讨论】:
标签: ruby-on-rails ruby authorization render before-filter
我想要一个像“must_have_permission_to_write”这样的前置过滤器,当用户没有写入权限时调用它会呈现一条消息,说“你不能这样做!”然后返回。
问题是我得到“每个动作只能渲染或重定向一次”当然...... 如何在 before 过滤器中停止执行? 谢谢
【问题讨论】:
标签: ruby-on-rails ruby authorization render before-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
然后,为某处拒绝访问创建一个操作,添加路由,然后在模板中放置您想要的任何内容。
【讨论】:
我注意到这里的帖子有几点:
【讨论】:
只需添加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
【讨论】:
return 将从方法中返回 nil(而不是从调用它的操作中),这不会做任何事情。您必须从过滤器方法返回false。另外,请参阅 tadman 对 Ben 的回答的回应。