отключение поддоменов с помощью квартиры - PullRequest
0 голосов
/ 18 февраля 2019

Я использую жемчужину квартиры в приложении rails.

У меня есть одна база данных со схемами для каждого арендатора и одна общедоступная схема для таблицы Tenant.

Я исключил wwwподдомен:

Apartment::Elevators::Subdomain.excluded_subdomains = ['www']

Затем, если я введу public.page.com или www.page.com, квартира не переключится на другого арендатора, но останется в общедоступном.Конечно, «public» - это не сам арендатор, а общие данные между арендаторами, поэтому я не хочу, чтобы какой-либо пользователь использовал общедоступную схему.

Как правильно избежать этого?

Это приложение работает на AWS, поэтому маршрут 53 предотвратит это, но, хотя я хочу, чтобы рельсы не обслуживали запрос через этот поддомен.

1 Ответ

0 голосов
/ 18 февраля 2019

Помимо исключения домена из квартиры, вам необходимо исключить их из маршрутов.В моем проекте я использую этот код для управления этим:

Я использую инициализатор для создания массива исключенных поддоменов.

# config/initializers/apartment/subdomain_exlusions.rb
Apartment::Elevators::Subdomain.excluded_subdomains = ['www', 'admin']

Затем мы можем использовать этот массив в вспомогательном классев маршрутах.

# config/routes.rb
class ExcludedSubdomainConstraint
  def self.matches?(request)
    request.subdomain.present? && !Apartment::Elevators::Subdomain.excluded_subdomains.include?(request.subdomain)
  end
end

Rails.application.routes.draw do
  constraints ExcludedSubdomainConstraint do
    # here routes that are accessible in subdomains
  end
end

В качестве бонуса вы можете направить исключенные субдомены в другое ограничение.


class DashboardSubdomainConstraint
  def self.matches?(request)
    Apartment::Elevators::Subdomain.excluded_subdomains.include?(request.subdomain) || request.subdomain == ''
  end
end

constraints DashboardSubdomainConstraint do
  namespace :dashboard do
    get '/settings'
  end
end

предоставит вам такой маршрут, как www.domain.com/dashboard/settinigs с доступомдля государственного арендатора.

СОВЕТ.И вы можете использовать другой root метод в отношении

...