Resque, Devise and admin authentication

你说的曾经没有我的故事 提交于 2019-11-27 05:22:13

问题


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.


回答1:


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

See this blog post and the comments. Hope it helps you.




回答2:


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




回答3:


You can try subclassing the Resque::Server class this way:

require 'resque/server'

class SecureResqueServer < Resque::Server

  before do
    redirect '/login' unless some_condition_is_met! 
  end

end

And using it in your routes this way:

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

I got this information from this blog. Give it a try.




回答4:


There is always the new solution, type this in your routes.rb for rails > 3.1:

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

And don't forget:

devise_for :admins


来源:https://stackoverflow.com/questions/7283728/resque-devise-and-admin-authentication

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!