2015-05-07 5 views
1

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

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

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

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

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

ответ

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

Смежные вопросы