0

我正在使用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)创建新属性时,所有其他用户都可以看到该记录。我只希望 john 能够看到他创造的记录。

我哪里错了?

我的模特关系是:-

Account-has_many :users

User-belongs_to :account

Property

4

2 回答 2

3

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

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

现在它只根据子域来限定由登录用户创建的数据。

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

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

欢迎任何关于我的实施的想法和建议。

于 2015-04-02T17:23:02.877 回答
1

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

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

于 2019-06-29T09:52:13.607 回答