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

Проверка подлинности Resek, Devise и admin

Используя Resque и Devise, у меня есть роли для пользователя, например:

User.first.role #=> admin
User.last.role #=> regular

Я хочу настроить аутентификацию для Resque. Итак, внутри config/routes.rb у меня есть:

namespace :admin do
  mount Resque::Server.new, :at => "/resque", :as => :resque
end

И, конечно же, он доступен для всех зарегистрированных пользователей.

Можно ли использовать роль из User.role? Он должен быть доступен только пользователям с ролью "admin".

Большое спасибо.

4b9b3361

Ответ 1

Используйте ограничение маршрута в файле routes.rb:

  resque_constraint = lambda do |request|
    request.env['warden'].authenticate? and request.env['warden'].user.admin?
  end

  constraints resque_constraint do
    mount Resque::Server, :at => "/admin/resque"
  end

См. этот пост в блоге и комментарии. Надеюсь, это поможет вам.

Ответ 2

в вашем файле routes.rb:

authenticate :user, lambda {|u| u.role == 'admin' } do
    mount Resque::Server.new, :at => "/resque"
end

Кроме того, убедитесь, что у вас есть devise_for :users где-то в этом файле

Ответ 3

Вы можете попробовать подклассифицировать класс Resque:: Server следующим образом:

require 'resque/server'

class SecureResqueServer < Resque::Server

  before do
    redirect '/login' unless some_condition_is_met! 
  end

end

И используя его в ваших маршрутах таким образом:

mount SecureResqueServer.new, :at => '/resque'

Я получил эту информацию из этого блога. Попробуйте.

Ответ 4

Всегда есть новое решение, введите это в своих маршрутах .rb для rails > 3.1:

  authenticate :admin do
    mount Resque::Server.new, :at => "/resque"
  end

И не забывайте:

devise_for :admins