gpt4 book ai didi

ruby-on-rails - rails : how to check admin user for setting up a route?

转载 作者:行者123 更新时间:2023-12-05 00:41:53 26 4
gpt4 key购买 nike

我需要使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com