1
爲了防止行動從在一個Rails應用程序,除非認證的一些控制器執行在軌發動機內的控制器的操作,您可以使用防止從執行
before_filter :validate_user, :only => [:create, :update]
這將防止創建和更新,除非正在執行一個授權用戶正在嘗試它。如果創建和更新的動作位於軌道引擎中的控制器中,則不起作用。
你如何有條件地阻止在軌道引擎內的控制器上執行動作?
爲了防止行動從在一個Rails應用程序,除非認證的一些控制器執行在軌發動機內的控制器的操作,您可以使用防止從執行
before_filter :validate_user, :only => [:create, :update]
這將防止創建和更新,除非正在執行一個授權用戶正在嘗試它。如果創建和更新的動作位於軌道引擎中的控制器中,則不起作用。
你如何有條件地阻止在軌道引擎內的控制器上執行動作?
如果有問題的validate_user
方法返回false
,則過濾器鏈將暫停並且不執行操作。
的典型模式是這樣的:
def validate_user
unless (...valid_conditions...)
flash[:error] = "You're not logged in."
redirect_to(login_path)
return false
end
end
你可以做任何你停止過濾器鏈之前想要的,但最好你redirect
或render
東西第一。
謝謝你的回覆tadman。問題在於,我想要阻止的操作位於引擎中,並且引擎控制器不會從主應用程序中的應用程序控制器繼承。我發現的唯一解決方案是用自己的實現來覆蓋引擎名稱空間中的application_controller,該實現繼承自主應用程序控制器。這種感覺對我來說是錯誤的,但是我又是一個很長時間的函數式程序員,而且我的OO感覺並不全是這樣,所以很多事情對我來說都感覺不對。我很想談談這個問題。 –
您可以始終創建一個定義此驗證的模塊,並強制主ApplicationController「包含」它。猴子修補這樣的東西並不總是一個好主意,但有時它是唯一的方法。 – tadman