Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 286
There Are Four Lights Avatar asked Sep 02 '11 12:09

There Are Four Lights


2 Answers

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 
like image 78
jpemberthy Avatar answered Sep 19 '22 08:09

jpemberthy


in your routes.rb file:

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

Also, make sure you have devise_for :users somewhere in that file

like image 33
Yossi Shasho Avatar answered Sep 19 '22 08:09

Yossi Shasho