充当租户 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_many
和 belongs_to
关系,尽管听起来它可能对您的应用程序有意义。
我正在使用 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_many
和 belongs_to
关系,尽管听起来它可能对您的应用程序有意义。