rails:如何检查管理员用户设置路由?

phi*_*son 0 routing ruby-on-rails

我需要设置一个仅在登录用户是admin(user.admin?)时使用devise才有效的路由.我正在为sidekiq做这个,但问题对任何类似的用途都有效.

这是我的路线代码:

class AdminConstraint
  def matches?(request)
    !request.session['warden.user.user.key'].nil? and request.session['warden'].user.admin?
  end
end

require 'sidekiq/web'
mount Sidekiq::Web => '/sidekiq', :constraints => AdminConstraint.new
Run Code Online (Sandbox Code Playgroud)

我从sidekiq wiki获得了这个代码:https: //github.com/mperham/sidekiq/wiki/Monitoring 我尝试了他们发布的代码,但是没有用,所以我做了一些修改,因为我刚发布.上面的代码不起作用,因为用户评估为nil.

处理这个问题的正确安全方法是什么?

谢谢你的帮助!

小智 6

如果您使用devise对用户进行身份验证,则需要执行的操作如下:

在routes.rb文件中,替换此行:

mount Sidekiq::Web => '/sidekiq', :constraints => AdminConstraint.new
Run Code Online (Sandbox Code Playgroud)

用这个块:

authenticate :user, lambda { |u| u.has_role? :admin } do
    mount Sidekiq::Web => '/sidekiq'
end
Run Code Online (Sandbox Code Playgroud)

该块的作用是告诉您的设计机制首先检查用户是否经过身份验证(该authenticate方法是设计方法),以及用户具有admin角色(lambda块检查),然后定义路由到sidekiq UI.这样,只有具有管理员角色的用户才能访问此路由.其他用户在开发中会出现路由错误,生产中会出现404错误.

还有一件事,该has_role?方法是一个rolify gem,在我的情况下我使用,但您可以用任何其他方法/查询替换它来检查用户是否为admin.