2013-03-12 65 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。