2010-04-25 110 views
4

根據敏捷開發書,我有一個Admin MVC控制着用戶如何登錄。在ApplicationController中,我有一個before_filter來檢查授權。因此,這將檢查用戶是否每登錄頁面登錄跳過某些方法的授權

的問題是,我想每個人都能夠訪問new方法,例如,在用戶(也就是任何人都應該能夠創建一個新用戶 - 當然只有管理員用戶應該有機會到UsersController中的其他方法,如edit等)。什麼是最好的方式來做到這一點?

回答

5

你可以這樣

before_filter :except=>[:method_name] #methods you want to skip filter 

OR

before_filter :only=>[:method_name] #methods you want to be filtered before called. 

EDITED

before_filter :filter_method, :except=>[:method_name] #methods you want to skip filter 

OR

before_filter :filter_method, :only=>[:method_name] #methods you want to be filtered before called. 
+1

如果此過濾器是在ApplicationController中指定的,那麼它將只應用於所有子控制器中的那些方法。 – 2010-04-25 18:52:59

+0

@john before_filter:在UsersController中授權,:except => [:new,:create]也可以。 – Salil 2010-04-25 18:59:51

+0

@John尼斯..我沒有意識到,哈哈。 – jonasespelita 2010-04-26 00:44:25

3

您可以在子控制器類中使用skip_before_filter方法來跳過默認的過濾器處理。例如:

class UsersController < ApplicationController 
    skip_before_filter :authorize, :only => [:new, :create] 
end 

—將跳過只爲控制器即過濾器仍然會得到適用於所有其他操作的用戶中newcreate行動命名爲:authorize的前過濾器。