2011-09-14 59 views
11

我通過添加管理員屬性爲管理員添加了管理員角色。設計before_filter authenticate_admin?

你能告訴我,如果這是創建需要一個管理員用戶要簽訂的before_filter的正確方法:

before_filter :authenticate_admin! 

在application_controller

protected 
    unless current_user.try(:admin?)  
    redirect_to :new_user_session_path  
    end 

回答

22

在任何控制器

用這種方法去吧

before_filter :authenticate_user! 
    before_filter do 
    redirect_to new_user_session_path unless current_user && current_user.admin? 
    end 

這也確保任何客人都被迫登錄。你並不需要修改默認的方法來強制認證只是訪問實例方法admin?

def admin? 
    self.admin == true 
end 

我的方法是創建一個角色屬性,並檢查其字符串值與一組預期的角色 - 它更靈活的這種方式,而不是必須創建許多布爾屬性。

+0

謝謝。我稍後再試。 –

+0

不客氣=) –

+1

沒有必要定義管理員?,如果管理員列已經是布爾值,那麼你可以調用user.admin?如果沒有管理員,它會自動返回true或false?方法在用戶。 – n0denine

1

查看上面的答案(Michael De Silva),我對他使用的代碼存在問題。他寫道(:new_user_session_path),但我需要它是一個常規路徑幫手(new_user_session_path)。在我改變這個之前,我得到了錯誤,說道路是無效的。 (我正在運行Rails 5.)

希望這對其他人有幫助!