2012-04-08 46 views
30
def new 
    before_filter do 
     redirect_to "/" unless current_admin || current_company 
     flash[:notice] = 'You dont have enough permissions to be here' unless current_admin || current_company 

    end 
    CODE CODE CODE 
    end 

    def edit 
    before_filter do 
     redirect_to "/" unless current_admin.id = 5 
     flash[:notice] = 'You dont have enough permissions to be here' unless current_admin || current_company 

    end 
    CODE CODE CODE 
    end 

這是我想要做的代碼,但我不知道如何做到這一點。 我想要實現的是爲我的每個動作應用before_filter規則。因此,也許用戶可以訪問INDEX操作,但不能訪問EDIT操作等。 我知道before_filter方法運行一次,而我無法運行4個before_filters,因爲我的英文不好,所以我只是給出一些參考。Rails before_filter在控制器中的具體操作

您必須知道我正在使用Devise for current_admin和current_company方法。 我需要應用不同的過濾器(如果管理員或如果company.id = X)和其他操作。

在此先感謝,我在這裏非常困惑。 任何幫助將不勝感激。

回答

65

創建您ApplicationController方法:

def check_privileges! 
    redirect_to "/", notice: 'You dont have enough permissions to be here' unless current_admin || current_company 
end 

然後在你的控制器:

before_filter :check_privileges!, only: [:new, :create, :edit, :save] 

或者

before_filter :check_privileges!, except: [:index, :show] 
+1

非常感謝你,這是我需要什麼。 – 2012-04-08 17:07:51

+0

說實話。我不知道你的方式也是可以接受的。 – Hauleth 2012-10-17 06:47:09

+14

在Rails 4+中,使用'before_action'而不是'before_filter'。 – 2014-05-14 00:18:54

相關問題