我正在使用Apartment gem和Rails 4.1设置多租户应用。
我的方法是管理界面将托管在单个域上,然后在自定义域上提供特定于租户的数据。管理用户将能够属于多个租户,并且能够在管理界面中切换租户而无需切换域。
使用Apartment,我已经能够使用会话cookie在租户之间切换而没有任何问题。这是我的代码:
class ApplicationController < ActionController::Base
before_filter :check_tenant
private
def check_tenant
if session[:current_tenant] and Apartment::Tenant.current_tenant != session[:current_tenant]
Apartment::Tenant.switch(session[:current_tenant])
elsif !session[:current_tenant]
Apartment::Tenant.switch() # Revert to the primary tenant
end
end
end
我遇到的困难是Apartment在中间件级别提供了基于域名的切换,我希望保持这种方式,因为我认为中间件比使用before_filter更快。我看到如何实现一个通用的中间件来根据请求切换租户,但我似乎无法访问和解密传递给中间件的proc中的会话存储。
由于使用会话存储似乎对管理界面有意义,您是否有任何关于在中间件级别访问会话存储的建议,或者将这两个方向放在一起的其他选择?
或者我只是担心让租户切换到中间件级别?