我开发了一个应用程序,它使用具有多模式的 PostgreSQL 来实现应用程序的多租户端。租户是通过子域检查的,但我正在尝试找到一种方法来仍然能够将主域用作我自己的注册点和管理后端。
下面是我的应用程序控制器,我相信检查租户正在发生。
我从这里跟随 railscast http://railscasts.com/episodes/389-multitenancy-with-postgresql?view=comments
class ApplicationController < ActionController::Base
protect_from_forgery
rescue_from CanCan::AccessDenied do |exception|
redirect_to root_path, :alert => exception.message
end
before_filter :mailer_set_url_options
def mailer_set_url_options
ActionMailer::Base.default_url_options[:host] = request.host_with_port
end
around_filter :scope_current_tenant
private
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user
def current_tenant
@current_tenant ||= Tenant.find_by_subdomain!(request.subdomain)
end
helper_method :current_tenant
def scope_current_tenant(&block)
current_tenant.scope_schema("public", &block)
end
end
我注意到的另一个问题是通过设计。似乎是因为多租户,并且在应用程序控制器中定义助手 current_user 对设计中的会话很挑剔,有什么想法吗?