基于角色的路由认证

role based route authentication

我一直在使用 devise 和 cancancan 进行身份验证和授权,resque 用于后台作业。我一直在关注 Ryans 截屏视频 271,并看到了下面 routes.rb 文件的代码片段。

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

到经过身份验证的用户,但在我的情况下,我只有用户 table 并且 admin 也是由角色列分隔的用户,现在我想根据用户角色对 resque 服务器路径的路由进行身份验证和授权,我怎样才能解决这个问题?

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

对于登录用户来说工作正常,但我希望只有管理员用户才能访问它。任何帮助将不胜感激。

# 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

希望对您有所帮助。