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

acts as tenant gem scopes all users data, ignoring scoping data based on the subdomain

我正在使用 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 即 john 已设置)。

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

我哪里错了?

我的模型关系是:-

Account - has_many :users

User - belongs_to :account

Property

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

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

现在它仅根据子域限定登录用户创建的数据范围。

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

acts_as_tenant requires each scoped model to have a column in its schema linking it to a tenant. Adding acts_as_tenant to your model declaration will scope that model to the current tenant BUT ONLY if a current tenant has been set.

欢迎大家对我的实施提出任何想法和建议。

这里真正的解决方法是确保在每个要限定范围的模型上都包含 acts_as_tenant(:account)。 这将确保它在保存数据之前检查 current_tenant

您不一定需要 has_manybelongs_to 关系,尽管听起来它可能对您的应用程序有意义。