2015-05-07 104 views
1

我一直在使用devise和cancancan进行身份验证和授权,为后台作业resque。resque。我一直在关注Ryans屏幕视频编号271,并看到下面的routes.rb文件的代码片段。基于角色的路由认证

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

来验证用户,但对我来说,我只有用户表和管理员也通过角色列分隔的用户,现在我想验证和授权基于用户角色,如何为resque服务器路径路由我可以解决这个问题吗?

authenticate :user do 
    mount Resque::Server, :at => "/resque" 
end 

对登录用户正常工作,但我希望它只能被管理员用户访问。任何帮助将受到热烈的赞赏。

回答

1
# config/initializers/admin.rb 
class CanAccessResque 
    def self.matches?(request) 
    current_user = request.env['warden'].user 
    return false if current_user.blank? 
    Ability.new(current_user).can? :manage, Resque 
    end 
end 


# routes.rb 
namespace :admin do 
    constraints CanAccessResque do 
    mount Resque::Server, at: 'resque' 
    end 
end 

# ability.rb 
class Ability 
    include CanCan::Ability 
    def initialize(user) 
    user ||= User.new 
    if user.is_admin? 
     can :manage, Resque 
    end 
    end 
end 

# user.rb 
class User < ActiveRecord::Base 
    def is_admin? 
    # your admin logic here for example: 
    self.role == "admin" 
    end 
end 

或了解更多信息,请查看本博客指出:resque-admin-in-rails-routes-with-cancan

希望这有助于你。

+0

谢谢@przbadu,这段代码保存了我的一天。 – codemilan

+0

@codemilan:不客气:) – przbadu