1

認証と承認にはdeviseとcancancanを、バックグラウンドジョブにはresqueを使用しています。私は Ryans のスクリーンキャスト番号 271 をフォローしており、routes.rb ファイルのコード スニペットの下を見ました。

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

認証されたユーザーに、しかし私の場合、私はユーザーテーブルしか持っておらず、管理者も役割列で区切られたユーザーです. 今、私はユーザーの役割に基づいてresqueサーバーパスのルートを認証および承認したいと思います. どうすればこの問題の解決策を達成できますか. ?

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

ログインしたユーザーには問題なく動作しますが、管理者ユーザーのみがアクセスできるようにしたいです。どんな助けでも心から感謝します。

4

1 に答える 1

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

これがお役に立てば幸いです。

于 2015-05-08T04:53:42.723 に答える