2016-04-26 2 views
1

У меня есть Sidekiq, смонтированный в файле маршрутов на конечную точку /sidekiq.Перенаправление запроса в ограничение маршрутизации

Я использую параметр constraints, чтобы он вызывал внешний класс для проверки как способ предотвращения доступа к этой конечной точке пользователям, не имеющим права доступа.

# config/routes.rb 
mount Sidekiq::Web => "/sidekiq", constraints: Sidekiq::AdminConstraint.new 

# lib/sidekiq/admin_constraint.rb 
module Sidekiq 
    class AdminConstraint 
    def matches?(request) 
     return false unless request.session[:user_id] 
     user = User.find_by_id(request.session[:user_id]) 
     user && Ability.new(user).can?(:manage, :sidekiq) 
    end 
    end 
end 

Эта установка отлично работает. Тем не менее, это только позволяет мне вернуть true/false о том, должен ли проходить запрос или нет. Это не позволяет мне -

  1. Установите флэш-сообщение (например, «Вы не имеете права доступа к этой странице») и
  2. переадресации произвольной странице

В этом смысле, я m ищет, чтобы он больше походил на контроллер before_filter.

Есть ли способ изменить объект request, который был передан для реализации этого перенаправления?

Спасибо!

+1

Этот ответ был полезен для меня: https: //stackoverflow.com/a/19649787/718180 – vergenzt

ответ

1

У меня нет идеи напрямую установить флеш-сообщения, но мы можем использовать по-разному.

вниз голосование принял rescue_from был сломан в рельсах 3. Не уверен, если это было зафиксировано в более поздних версиях

Используйте следующее решением

В вашем routes.rb, добавьте следующую строку в конце файла

соответствие "* path",: to => "application # error_404" В основном это означает, что любой путь, который не определен в вашем маршруте, закончится ошибкой_404 в контроллере аппликации. Его очень важно, чтобы положить это в конце файла

А в вашем ApplicationController, добавьте

Защиту error_404 redirect_to root_path конец

Благодаря

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