2012-04-08 10 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 

To jest kod, który chcę zrobić, ale nie mogę wymyślić, jak to zrobić dobrze. Co chcę osiągnąć, to zastosować regułę before_filter dla każdej z moich akcji. Być może użytkownik może uzyskać dostęp do akcji de INDEX, ale nie do akcji EDIT itp. Wiem, że metoda before_filter działa jednorazowo, a ja nie mogę uruchomić 4 before_filters, po prostu podaję pewne referencje z powodu mojego słabego angielskiego.Rails before_filter dla określonych działań w kontrolerze

Musisz wiedzieć, że używam Devise dla metod current_admin i current_company. Potrzebuję zastosować różne filtry (jeśli admin lub if company.id = X) i inne działania.

Z góry dziękuję, jestem tutaj utknięty. Każda pomoc zostanie doceniona.

Odpowiedz

65

Utwórz w swojej metodzie ApplicationController:

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

, a następnie w kontrolerze:

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

Albo

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

Dziękuję bardzo to było dokładnie to, czego potrzebowałem. –

+0

Szczerze mówiąc. Nie wiedziałem, że twoja droga jest również do przyjęcia. – Hauleth

+14

W Railsach 4+ użyj 'before_action' zamiast' before_filter'. –

Powiązane problemy