2015-05-07 106 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