我正在使用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
答案 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_many
和belongs_to
关系。