2011-04-26 41 views
20

按照這裏的指南,我使用遷移爲我的數據庫添加了一個布爾屬性:設計:限制對管理員的操作

rails generate migration add_admin_to_user admin:boolean 

我已經通過Rails控制檯將我的帳戶配置爲管理員(admin = 1)。我有一個控制器,我想限制只爲管理員訪問某些操作(新建,編輯,創建和銷燬)。

我也有普通用戶,我只想限制只在這個控制器中管理員訪問這些操作。目前,我正在使用代碼:

before_filter :authenticate_user!, :only => [:new, :edit, :create, :destroy] 

這限制了對註冊用戶的訪問 - 如何更進一步並要求管理員?

回答

33

您可以輕鬆實現自己的before_filter,以允許通過使用.admin訪問只有管理員用戶?與您的用戶模型關聯的方法。例如:

before_filter :verify_is_admin 

private 

def verify_is_admin 
    (current_user.nil?) ? redirect_to(root_path) : (redirect_to(root_path) unless current_user.admin?) 
end 
+0

這樣做!謝謝:) – 2011-04-26 18:39:55

9

您將要過濾器之前來定義你自己的方法,然後調用之前檢測用戶是否是管理員或不在該方法的authenticate_user!

before_filter :custom_method, :only => [:new, :edit, :create, :destroy] 

private 
def custom_method 
    authenticate_user! 

    if current_user.admin 
    return 
    else 
    redirect_to root_url # or whatever 
    end 
end 

您將需要執行authenticate_user!先檢查current_user變量。

伊恩。

+0

authenticate_user之前調用此問題!如果沒有登錄的人試圖訪問它,過濾器將拋出一個異常而不是重定向,因爲current_user沒有被定義 – 2011-04-26 22:02:14

+1

@ will:authenticate_user!會自動將訪問者重定向到sign_in行動,如果他沒有登錄,所以它甚至不會去if條款 – 2011-05-08 12:11:48

+1

我個人認爲這是最好的方法。你保持Devise爲你提供封裝的抽象,然後才進一步改進。你自己的代碼保持簡單而富有表現力。 – josemota 2014-06-16 11:30:46