0

目前我delayed-web在我的项目中使用 gem。我有多个用户角色,我不希望角色是销售的用户可以访问页面延迟的 Web 后台界面。我已经有一种方法来检查我的应用程序控制器中的身份验证。但是,我不知道如何使它在路由文件中工作。任何建议将不胜感激。

更新:我没有使用 Devise gem。我推出自己的身份验证。

application_controller.rb

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception

  before_action :authenticate
  before_action :check_pricer_role, except: [:export_for_customer]
  helper_method :check_pricer_role
 def check_pricer_role
    unless current_user && (current_user.pricer? || current_user.admin?)
      redirect_to errors_not_found_path
    end
  end
end

路线.rb

Rails.application.routes.draw do
  # How to apply the defined authentication here?
  mount Delayed::Web::Engine, at: '/jobs'
end
4

1 回答 1

0

好的,我已经解决了这个问题。事实证明,我可以根据保存在 Request 对象中的身份验证令牌找到当前用户(同样,我不使用任何宝石进行身份验证,我推出了自己的宝石,但我不认为那是无论如何这里的问题)。这是完整的解决方案,以防有人遇到同样的困难:

    class AuthConstraint
      def matches?(request)
        current_user ||= User.find_by_auth_token(request.cookie_jar['auth_token']) if request.cookie_jar['auth_token']
         current_user.present? && !current_user.sales?
      end
    end

    Rails.application.routes.draw do
        mount Delayed::Web::Engine, at: '/jobs', :constraints => AuthConstraint.new
        //Other resources ........ 
    end
于 2017-01-23T03:56:55.130 回答