2013-03-12 67 views
0

我需要设置一个只有在使用设备登录的用户为admin(user.admin?)时才有效的路由。我正在为sidekiq做这个,但这个问题适用于任何类似的用途。rails:如何检查管理员用户设置路由?

这里是我的路线代码:

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维基:https://github.com/mperham/sidekiq/wiki/Monitoring 我想他们发布的代码,它没有工作,所以我做了一些修改,因为我刚刚发布。上面的代码在用户评估为零时不起作用。

什么是正确的安全方式来处理这个?

感谢您的任何帮助!

回答

0

你不是真的想改变路线取决于用户是谁(我甚至不知道是否有可能在铁轨没有很多黑客的),你想授权用户的动作。

有几个很好的授权库。我个人喜欢CanCan,但还有很多其他的。

0

如果你正在做的任何类型的过滤控制器为色器件则可以使用佣工

class ###Controller < ApplicationController 

    before_filter: :authenticate_admin! 

def index 
end 

或任何设计模型,你试图允许即

before_filter: :authenticate_user! 
before_filter: :authenticate_author! 

像bdares访问说过。如果设计中的辅助方法不够,可以使用CanCan gem进行授权

希望它有帮助!

5

如果您正在使用设计来验证用户身份,你需要做的是:

里面你的routes.rb文件,替换该行:此块

mount Sidekiq::Web => '/sidekiq', :constraints => AdminConstraint.new 

authenticate :user, lambda { |u| u.has_role? :admin } do 
    mount Sidekiq::Web => '/sidekiq' 
end 

该块所做的是告诉您的设计机制首先检查用户是否已通过身份验证(authenticate方法是设计方法),并且用户在定义到sidekiq UI的路由之前,具有管理员角色(lambda块检查)。 这样,只有具有管理员角色的用户才能够访问此路由。其他用户将在开发中遇到路由错误,并在生产中出现404错误。

还有一件事,has_role?方法是一个rolify宝石,在我的情况下我使用,但你可以用任何其他方法/查询来检查用户是否为admin。