首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >禁用带有单元的子域

禁用带有单元的子域
EN

Stack Overflow用户
提问于 2019-02-19 02:34:18
回答 1查看 759关注 0票数 0

我正在rails应用程序中使用公寓宝石。

我有一个数据库,每个租户都有模式,还有一个公共模式用于租户表。

我已排除www子域:

代码语言:javascript
代码运行次数:0
运行
复制
Apartment::Elevators::Subdomain.excluded_subdomains = ['www']

然后,如果我进入public.page.comwww.page.com,公寓不会切换到另一个租户,但它将停留在公共租户。当然," public“本身不是租户,只是租户之间的公共数据,所以,我不希望任何用户使用public schema。

避免这种情况的正确方法是什么?

这个应用是在AWS上运行的,所以,路由53将阻止这一点,但是,尽管我想避免rails通过这个子域服务请求。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-19 03:07:39

除了从单元中排除域之外,您还需要从路由中排除它们。在我的项目中,我使用下面的代码来管理这个:

我使用初始化器来创建excleded子域的数组。

代码语言:javascript
代码运行次数:0
运行
复制
# config/initializers/apartment/subdomain_exlusions.rb
Apartment::Elevators::Subdomain.excluded_subdomains = ['www', 'admin']

然后,我们可以在路由的helper类中使用这个数组。

代码语言:javascript
代码运行次数:0
运行
复制
# 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

此外,您还可以将排除的子域路由到另一个约束

代码语言:javascript
代码运行次数:0
运行
复制
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方法

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54753395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档