2013-04-18 25 views
3

我將一些引擎安裝在另一個引擎內,因爲此引擎要由來自各種引擎的多個子元素聚集在一起。該引擎終於安裝在主應用程序中。 我的路線如下:如何確保用戶無法從父引擎內重定向到子引擎中的另一個元素

Rails.application.routes.draw do 

    namespace :Parent_Engine, :path => "/foo" do 
    match "/", :to=>"parent_engine#index" 

    resources :parent_engine , :only=>[:show] do 
     mount Engine1::Engine => '/engine1' 
     mount Engine2::Engine => '/engine2' 
    end 
    end 
end 

現在,當我希望看到一個元件「引擎1」我只是有一個網址爲

/parent_engine/:id/engine1/object_type/:id 

我面臨的問題是我需要停止用戶可以通過顯式更新瀏覽器中的url來訪問engine1的另一個對象。例如:

來自:

/parent_engine/1/engine1/object_type/1 

到:

/parent_engine/2/engine1/object_type/2 

此外,我不能把在安裝發動機的檢查,因爲這些2單獨裝在容器中的應用程序也是如此。 我只是不希望用戶能夠在父引擎的上下文內重定向到另一個對象實例。

感謝和問候提前的任何幫助。

回答

0

我不知道你試圖做什麼,但我懷疑你可以使用路由約束:

Rails.application.routes.draw do 

    namespace :Parent_Engine, :path => "/foo" do 
    match "/", :to=>"parent_engine#index" 

    resources :parent_engine , :only=>[:show] do 
     mount Engine1::Engine => '/engine1', :constraints => Engine1Contraint.new 
     mount Engine2::Engine => '/engine2' 
    end 
    end 
end 

然後你就可以用

class Engine1Contraint 
    def matches?(request) 
    request.path != 'something' || request.env['warden'].user == 'Admin' 
    end 
end 

或任何確定config/initializers/engine1_contraints.rb您需要在母體引擎中調整規則以控制子引擎。

相關問題