【发布时间】:2019-08-19 19:48:52
【问题描述】:
我正在构建一个使用共享数据库的多租户 Rails 应用程序,其中通过将所有内容限定到每个帐户(类似于 Basecamp 3)来隔离数据,而不是使用单独的表和子域。我正在采取的方法描述为here。
每个帐户都有自己的数据(例如产品、库存)和许多具有不同角色的用户(例如帐户所有者、员工、客户等)。我使用Clearance 进行用户注册和登录。
似乎有两种方法可以对这样的应用程序进行建模:
似乎选项 2 是更简单的解决方案,但是当新用户通过 Clearance 注册时,我无法了解如何创建帐户。我已经进入more detail on this problem here,但我担心我使用选项 2 为我的应用程序建模的方式并不理想。
这些方法中的哪一种最容易设置和维护?或者,是否有另一种我缺少的建模方法?
因为我最终希望该网站有一些用户是客户,所以我是否应该接受 the approach 使用子域(如 Shopify?)。
【问题讨论】:
-
在这两种模型中,您最终会得到相同的表格,对吧?即使在选项 2 中,我仍然会创建一个与用户表的作用域 has_one 关系,我将其命名为 :account_owner,因此我并没有真正看到两个建议模型之间的区别。我认为即使选择两者之一,切换也不会太费力,还是我错过了一些琐碎的部分?
-
是的,这将是相同的表。我想我正在努力找出将它们关联起来并将其纳入注册表单的最佳方式。例如,帐户是否应该属于用户?在这种情况下,如果他们通过注册表单来创建帐户,则可以通过回调创建帐户,如果向他们发送邀请,则分配他们的帐户。或者,用户应该属于该帐户吗?在这种情况下,新用户注册时如何创建帐户?
-
我认为这也取决于帐户所有者是否与其他类型的用户共享很多逻辑。客户/员工是否也可以登录(就像用户一样)。您最终是否允许与多个帐户所有者共享帐户所有权等?您甚至可以考虑在帐户之间使用角色表,并映射每个用户在特定帐户中扮演的角色类型。
-
是的,帐户所有者将与其他用户共享很多逻辑。看起来我的“选项 2”是本书采用的方法leanpub.com/multi-tenancy-rails-2/read_sample
标签: ruby-on-rails architecture data-modeling multi-tenant clearance