充当租户gem范围所有用户数据,忽略基于子域的范围数据

时间:2015-04-02 16:29:46

标签: ruby-on-rails ruby multi-tenant acts-as-tenant

我正在使用acts_as_tenant gem来创建一个多租户应用。我按照说明操作。我正在使用子域名。

application_controller.rb我有:

set_current_tenant_by_subdomain(:account, :subdomain)

我使用Account作为租户。在我的User模型中,我打电话给:

acts_as_tenant(:account)

问题

当我使用子域名登录帐户时(例如:john.realestate.dev),一切正常(current_tenant,即设置了约翰)。

我有另一个名为Property的模型;当当前登录的租户即john创建新属性时,所有其他用户都可以看到该记录。我只希望约翰能够看到他创造的记录。

我哪里错了?

我的模特关系是: -

Account - has_many :users

User - belongs_to :account

Property

2 个答案:

答案 0 :(得分:2)

我通过在Account(has_many:properties)和Property(Belongs_to:account)之间建立关系来解决我的问题。

然后我将acts_as_tenant(:account)添加到Property Model。我运行了一个将account_id添加到属性模型的迁移。

现在,它只根据子域记录由登录用户创建的数据。

我通过多次重读gem的文档来修复它,直到我理解了doc中的这个声明。

  

acts_as_tenant要求每个范围模型在其架构中都有一列将其链接到租户。将acts_as_tenant添加到模型声明中会将该模型范围限定为当前租户,但仅限于当前租户已设置。

对我实施的任何想法和建议都是受欢迎的。

答案 1 :(得分:1)

这里的真正解决方法是确保在要作用域的每个模型中都包含acts_as_tenant(:account)。 这将确保在保存数据之前先检查current_tenant

虽然听起来似乎对您的应用程序来说很有意义,但您不一定需要has_manybelongs_to关系。