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

Questo è il codice che voglio fare, ma non riesco a capire come farlo nel modo giusto. Quello che voglio ottenere è applicare una regola before_filter per ciascuna delle mie azioni. Quindi forse un utente può accedere all'azione INDICE ma non all'azione EDIT, ecc. So che il metodo before_filter viene eseguito una volta sola e non posso eseguire 4 before_filters, sto solo dando qualche riferimento a causa del mio inglese scarso.Rails before_filter per azioni specifiche nel controller

È necessario sapere che sto utilizzando Devise per i metodi current_admin e current_company. Devo applicare diversi filtri (se admin o if company.id = X) e altre azioni.

Grazie in anticipo, sono abbastanza bloccato qui. Qualsiasi aiuto sarà apprezzato.

risposta

65

Creare nel metodo ApplicationController:

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

E poi nel controller:

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

O

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

ringrazio molto questo era esattamente quello che mi serviva. –

+0

Per essere onesti. Non sapevo che la tua via è anche accettabile. – Hauleth

+14

In Rails 4+, usare 'before_action' invece di' before_filter'. –

Problemi correlati