作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要使用 devise 设置仅在登录用户是管理员(user.admin?)时才有效的路由。我正在为 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
我从 sidekiq wiki 获得此代码:https://github.com/mperham/sidekiq/wiki/Monitoring我尝试了他们发布的代码,但没有成功,所以我在刚刚发布的时候做了一些修改。当用户评估为 nil 时,上面的代码不起作用。
处理此问题的正确安全方法是什么?
感谢您的帮助!
最佳答案
如果您使用 devise 对用户进行身份验证,您需要执行以下操作:
在你的 routes.rb 文件中,替换这一行:
mount Sidekiq::Web => '/sidekiq', :constraints => AdminConstraint.new
用这个 block :
authenticate :user, lambda { |u| u.has_role? :admin } do
mount Sidekiq::Web => '/sidekiq'
end
该 block 的作用是告诉您的设计机制首先检查用户是否经过身份验证(authenticate
方法是一种设计方法),并且用户具有管理员角色(lambda block 检查) ,在定义到 sidekiq UI 的路由之前。这样,只有具有管理员角色的用户才能访问此路由。其他用户在开发中会遇到路由错误,在生产中会出现 404 错误。
还有一点,has_role?
方法是一个 rolify gem,在我的例子中我使用它,但你可以用任何其他检查用户是否是管理员的方法/查询来替换它。
关于ruby-on-rails - rails : how to check admin user for setting up a route?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15353082/
我是一名优秀的程序员,十分优秀!