2012-07-11 50 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工作到了这一切,你试图做同样的事情,两种不同的方式?