Проверка подлинности 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".
Большое спасибо.
Ответы
Ответ 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