2012-04-08 1 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 для методов current_admin и current_company. Мне нужно применить различные фильтры (если admin или if 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

Большое спасибо это было именно то, что мне было нужно. –

+0

Если честно. Я не знал, что ваш путь также приемлем. – Hauleth

+14

В Rails 4+ используйте 'before_action' вместо' before_filter'. –

 Смежные вопросы

  • Нет связанных вопросов^_^