web-dev-qa-db-fra.com

Rails before_filter pour des actions spécifiques dans le contrôleur

  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

C'est le code que je veux faire, mais je n'arrive pas à comprendre comment le faire correctement. Ce que je veux réaliser, c'est appliquer une règle before_filter pour chacune de mes actions. Donc, peut-être qu'un utilisateur peut accéder à l'action INDEX mais pas à l'action EDIT, etc. Je sais que la méthode before_filter s'exécute une seule fois, et je ne peux pas exécuter 4 before_filters, je donne juste une référence en raison de mon anglais médiocre.

Vous devez savoir que j'utilise Devise pour les méthodes current_admin et current_company. J'ai besoin d'appliquer différents filtres (si admin ou si company.id = X) et d'autres actions.

Merci d'avance, je suis plutôt coincé ici. Toute aide serait appréciée.

32
Mau Ruiz

Créez dans votre méthode ApplicationController:

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

Et puis dans votre contrôleur:

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

Ou

before_filter :check_privileges!, except: [:index, :show]
69
Hauleth