30 votes

Resque, Devise et authentification admin

En utilisant Resque et Devise, j'ai des rôles pour l'utilisateur, comme:

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

Je souhaite configurer une authentification pour Resque. Donc, dans config / routes.rb, j'ai:

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

Et, bien sûr, il est accessible à tous les utilisateurs connectés.

Existe-t-il un moyen d'utiliser un rôle depuis User.role? Il ne devrait être accessible que par les utilisateurs ayant un rôle «admin».

Merci beaucoup.

39voto

jpemberthy Points 4063

Utilisez une contrainte d'itinéraire, dans votre fichier 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
 

Voir cet article de blog et les commentaires. J'espère que cela vous aide.

20voto

Yossi Shasho Points 1209

dans votre fichier routes.rb :

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

Assurez-vous également que vous avez devise_for :users quelque part dans ce fichier

14voto

cicloon Points 1015

Vous pouvez essayer de sous-classer la classe Resque :: Server de cette façon:

 require 'resque/server'

class SecureResqueServer < Resque::Server

  before do
    redirect '/login' unless some_condition_is_met! 
  end

end
 

Et en l'utilisant dans vos itinéraires de cette façon:

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

J'ai obtenu cette information de ce blog. Essaie.

9voto

Calin Points 1217

Il y a toujours la nouvelle solution, tapez ceci dans votre routes.rb pour rails> 3.1:

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

Et n'oubliez pas:

 devise_for :admins
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X