【问题标题】:Tweaking scoping rules as part of acts_as_tenant?调整范围规则作为acts_as_tenant 的一部分?
【发布时间】:2020-05-14 17:37:14
【问题描述】:

我有一个rails 模型Thing,它使用acts_as_tenant 将它与一家公司联系起来。这很好用,现在属于公司的用户只能访问与其公司关联的事物。

class Thing < ApplicationRecord
  acts_as_tenant(:company)
  belongs_to :company
end

现在我已向我的事物添加了一个 is_global 布尔字段。现在,我希望 Thing(通过acts_as_tenant)改为限定范围,以便用户可以访问他们公司的事物任何全局事物。有没有办法配置acts_as_tenant 来启用这种行为?

我目前的解决方法是放弃此模型中的 acts_as_tenant(:company) 调用,而是创建一个新的默认范围:

default_scope { where('company_id = ? or is_global = true', ActsAsTenant.current_tenant.id) } 

这似乎可以完成这项工作,但我担心我可能会在不知不觉中绕过acts_as_tenant 的一些好的功能。

【问题讨论】:

  • 我认为 ActsAsTenant 中没有办法进行设置,但您通过这种方式实现了同样的目标。我见过的唯一真正的配置选项是 ActsAsTenant 强制始终设置租户的能力。但这并不影响你。顺便说一句,当您指定了acts_as_tenant 时,我认为您不需要belongs_to 关系。

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


【解决方案1】:

在一个表中有一些记录可供任何租户访问,而一些记录被租用在同一个表中,这有点违背多租户的理念。

“一个或另一个字段是空白的”也不是一个很好的模式。

我建议为每个租户创建一个全局记录的克隆。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2015-06-02
    相关资源
    最近更新 更多