根據敏捷開發書,我有一個Admin
MVC控制着用戶如何登錄。在ApplicationController
中,我有一個before_filter
來檢查授權。因此,這將檢查用戶是否每登錄頁面登錄。跳過某些方法的授權
的問題是,我想每個人都向能夠訪問new
方法,例如,在用戶(也就是任何人都應該能夠創建一個新用戶 - 當然只有管理員用戶應該有機會到UsersController中的其他方法,如edit
等)。什麼是最好的方式來做到這一點?
根據敏捷開發書,我有一個Admin
MVC控制着用戶如何登錄。在ApplicationController
中,我有一個before_filter
來檢查授權。因此,這將檢查用戶是否每登錄頁面登錄。跳過某些方法的授權
的問題是,我想每個人都向能夠訪問new
方法,例如,在用戶(也就是任何人都應該能夠創建一個新用戶 - 當然只有管理員用戶應該有機會到UsersController中的其他方法,如edit
等)。什麼是最好的方式來做到這一點?
你可以這樣
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.
您可以在子控制器類中使用skip_before_filter
方法來跳過默認的過濾器處理。例如:
class UsersController < ApplicationController
skip_before_filter :authorize, :only => [:new, :create]
end
—將跳過只爲控制器即過濾器仍然會得到適用於所有其他操作的用戶中new
和create
行動命名爲:authorize
的前過濾器。
我也建議使用CanCan gem進行授權,因爲它有一個非常簡單和乾淨的方式來定義授權規則。 http://github.com/ryanb/cancan
如果此過濾器是在ApplicationController中指定的,那麼它將只應用於所有子控制器中的那些方法。 – 2010-04-25 18:52:59
@john before_filter:在UsersController中授權,:except => [:new,:create]也可以。 – Salil 2010-04-25 18:59:51
@John尼斯..我沒有意識到,哈哈。 – jonasespelita 2010-04-26 00:44:25