Подтвердить что ты не робот

Rails before_filter для определенных действий в контроллере

  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, я просто даю некоторую ссылку из-за моего плохого английского.

Вы должны знать, что я использую Devise для методов current_admin и current_company. Мне нужно применить различные фильтры (если admin или if company.id = X) и другие действия.

Заранее спасибо, я довольно застрял здесь. Любая помощь будет оценена.

4b9b3361

Ответ 1

Создайте в своем методе 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]