2013-07-07 40 views
0

說我有一大堆路線,我只想讓登錄用戶訪問。我可以把支票在每個控制器方法,上面寫着沿Rails 3檢查是否登錄所有匹配正則表達式的路由?

if signed_in? 
    #do stuff here 
else 
    redirect_to root_path 

我想我也可以用before_filter在控制器減少我需要重寫的次數行的東西(雖然我並不是非常熟悉語法)。然而,我理想的情況是隻想將它寫在一個地方,所有匹配某個正則表達式的路線都需要經過這個檢查,例如,所有形式爲www.mysite.com/admin/...的路線都需要此驗證檢查。有沒有辦法做到這一點,所以我只需要寫一次這個檢查,而不是通過我的控制器重複代碼?

回答

0

我找到了一個職位,顯示瞭如何獲得一個控制器內部的當前網址:How can I find out the current route in Rails?

現在你可以寫ApplicationController內的方法,如果URL以/admin開始,驗證用戶是否簽約,檢查在ApplicationControllerbefore_filter中調用該方法。現在這個方法會在每個請求之前調用,但是由於您首先檢查了正則表達式,它不會對不以/admin開頭的頁面產生任何影響。

它可能會類似於此:

class ApplicationController < ActionController::Base 
    before_filter :check_login_if_admin_route 

    def check_login_if_admin_route 
    current_uri = request.env['PATH_INFO'] 
    if !current_uri.start_with?('/admin') 
     redirect_to root_path 
    end 
    end 
end 
+0

這就是我一直在尋找,謝謝。 – Kvass

相關問題