【问题标题】:role based route authentication基于角色的路由认证
【发布时间】:2015-07-17 19:51:13
【问题描述】:

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

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

对经过身份验证的用户,但在我的情况下,我只有用户表,管理员也是由角色列分隔的用户,现在我想根据用户角色对 resque 服务器路径的路由进行身份验证和授权,我该如何实现解决方案对于这个问题?

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

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

【问题讨论】:

    标签: devise ruby-on-rails-4.1 ruby-2.1 cancancan


    【解决方案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

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-12
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      • 1970-01-01
      • 2021-08-26
      相关资源
      最近更新 更多