我想要一個過濾器之前像「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