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

Este es el código que yo quiero hacer, pero no puedo encontrar la manera de hacer las cosas bien. Lo que quiero lograr es aplicar una regla before_filter para cada una de mis acciones. Entonces, quizás un Usuario pueda acceder a la acción INDEX pero no a la acción EDITAR, etc. Sé que el método before_filter se ejecuta una sola vez, y no puedo ejecutar 4 before_filters, solo estoy dando alguna referencia debido a mi pobre inglés.rieles before_filter de acciones específicas en el controlador

Debe saber que estoy utilizando Devise para los métodos current_admin y current_company. Necesito aplicar diferentes filtros (si es administrador o si company.id = X) y otras acciones.

Gracias de antemano, estoy bastante sorprendido aquí. Cualquier ayuda será apreciada.

Respuesta

65

crear en su método ApplicationController:

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

Y luego, en su controlador:

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

O

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

Muchas gracias esto era exactamente lo que necesitaba. –

+0

Para ser honesto. No sabía que tu camino también es aceptable. – Hauleth

+14

En Rails 4+, use 'before_action' en lugar de' before_filter'. –

Cuestiones relacionadas