2012-06-14 160 views
1

爲了防止行動從在一個Rails應用程序,除非認證的一些控制器執行在軌發動機內的控制器的操作,您可以使用防止從執行

before_filter :validate_user, :only => [:create, :update] 

這將防止創建和更新,除非正在執行一個授權用戶正在嘗試它。如果創建和更新的動作位於軌道引擎中的控制器中,則不起作用。

你如何有條件地阻止在軌道引擎內的控制器上執行動作?

回答

0

如果有問題的validate_user方法返回false,則過濾器鏈將暫停並且不執行操作。

的典型模式是這樣的:

def validate_user 
    unless (...valid_conditions...) 
    flash[:error] = "You're not logged in." 
    redirect_to(login_path) 
    return false 
    end 
end 

你可以做任何你停止過濾器鏈之前想要的,但最好你redirectrender東西第一。

+0

謝謝你的回覆tadman。問題在於,我想要阻止的操作位於引擎中,並且引擎控制器不會從主應用程序中的應用程序控制器繼承。我發現的唯一解決方案是用自己的實現來覆蓋引擎名稱空間中的application_controller,該實現繼承自主應用程序控制器。這種感覺對我來說是錯誤的,但是我又是一個很長時間的函數式程序員,而且我的OO感覺並不全是這樣,所以很多事情對我來說都感覺不對。我很想談談這個問題。 –

+0

您可以始終創建一個定義此驗證的模塊,並強制主ApplicationController「包含」它。猴子修補這樣的東西並不總是一個好主意,但有時它是唯一的方法。 – tadman