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.
| 归档时间: |
|
| 查看次数: |
1840 次 |
| 最近记录: |