Search code examples
ruby-on-railsdeviseresque

Resque, Devise and admin authentication


Using Resque and Devise, i have roles for User, like:

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

I want to setup an authentication for Resque. So, inside config/routes.rb i have:

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

And, of course it's accessible for all logged in users.

Is there any way to use a role from User.role? It should be accessible only by users with 'admin' role.

Thanks a lot.


Solution

  • Use a route constraint, in your routes.rb file:

      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