аутентификация маршрута на основе ролей

Я использую devise и cancancan для аутентификации и авторизации, соответственно, resque для фоновых заданий. Я следил за скринкастом Райана номер 271 и увидел ниже фрагмент кода для файла route.rb.

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

для аутентифицированного пользователя, но в моем случае у меня есть только таблица пользователей, а администратор также является пользователями, разделенными столбцом роли. Теперь я хотел бы аутентифицировать и авторизовать маршрут для пути сервера resque на основе роли пользователя. Как я могу решить эту проблему ?

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

отлично работает для вошедшего в систему пользователя, но я хочу, чтобы он был доступен только пользователю с правами администратора. Любая помощь будет сердечно оценена.


person codemilan    schedule 07.05.2015    source источник


Ответы (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

Надеюсь, это поможет вам.

person przbadu    schedule 08.05.2015