2012-07-11 49 views
7

我正在構建一個以ActiveAdmin作爲主管理界面的多租戶應用程序。我已經使用acts_as_tenant gem很好地完成了單獨的數據分離。ActiveAdmin中的多租戶,多管理員用戶

我已經使用AdminUser模型作爲所有用戶的用戶模型對象。

爲了添加其他用戶,AdminUser也被限定在租戶的範圍內。

這是擺脫登錄,因爲當ActiveAdmin /設計嘗試認證,我想這是第一次打,如下圖所示的find_tenant過濾器:

class ApplicationController 
    set_current_tenant_through_filter 

    before_filter :find_tenant 

    def find_tenant 
    if admin_user_signed_in? 
     set_current_tenant(Company.find(current_admin_user.company_id)) 
    end 
    end 

不知道如何解決這個問題?我希望用戶登錄,然後應用程序從登錄用戶處獲取company_id,並設置租戶,並通過該租戶對ActiveAdmin上顯示的所有數據進行作用域限制(如果可以通過登錄,此部分可以通過acts_as_tenant gem運行良好) 。

感謝

回答

0

我認爲你的懷疑是正確的,並且該find_tenant方法被驗證之前調用,導致admin_user_signed_in?是假的。如果確實是這種情況(從http://guides.rubyonrails.org/action_controller_overview.html#after-filters-and-around-filters開始),請將其調整爲使用後置濾鏡,而不是使用後綴濾鏡。

class ApplicationController 
    set_current_tenant_through_filter 

    after_filter :find_tenant 

    def find_tenant 
    if admin_user_signed_in? 
     set_current_tenant(Company.find(current_admin_user.company_id)) 
    end 
    end 

不知道如何set_current_tenant_through_filter工作到了這一切,你試圖做同樣的事情,兩種不同的方式?