对多租户rails应用程序进行建模,以便于维护

问题描述 投票:0回答:1

我正在构建一个多租户rails应用程序,该应用程序使用共享数据库,通过将每个帐户(类似于Basecamp 3)的所有内容(而不是here)划分为数据,而不是使用单独的表和子域。我正在采取的方法是Clearance

每个帐户都有自己的数据(例如产品,库存),以及许多具有不同角色的用户(例如帐户所有者,员工,客户等)。我正在使用enter image description here进行用户注册和登录。

似乎有两种方法可以用来建模这样的app:

  1. 帐户所有者注册并创建其帐户排序,例如创建个人资料。我将通过注册表单上的嵌套字段创建帐户。所有东西都继承自账户所有者......

  1. 或者,当新用户注册时,会创建一个新帐户并与该用户关联(如果这种情况发生回调?)。所有内容(例如产品和其他用户,如员工或客户)都从帐户继承,而不是帐户所有者。帐户所有者只是属于该帐户的另一个用户。 more detail on this problem here

似乎选项2是更简单的解决方案,但是当新用户通过Clearance注册时,我阻止了如何创建帐户。我已经进入了the approach,但我担心我使用选项2为我的应用程序建模的方式并不理想。

哪种方法最简单的设置和维护?或者,是否有另一种模拟这种方式的方法,我错过了?

因为我最终希望该网站有一些用户是客户,我应该使用belong_to使用Subdomains(如Shopify?)。

ruby-on-rails architecture data-modeling multi-tenant clearance
1个回答
0
投票

所以,我不确定这个解决方案随着时间的推移会如何发挥作用,但是如果它可以帮助其他有类似问题的人,我最终会继续使用这个流程:

  1. 用户通过/注册时通过清关注册表格注册
  2. 注册后,如果他们尚未创建帐户,则会将其重定向到accounts / new
  3. 帐户has_one用户和每个用户belong_to帐户
  4. 其他一切,如产品,belong_to帐户
  5. 用户角色根据您的注册方式设置。因此,如果您从主页注册,则默认情况下您是帐户所有者。
  6. 访问控制由用户角色和Pundit确定。
  7. 数据是孤立的,因为其他一切,如产品,enter image description here帐户

这是关系的草图:# POST /accounts def create @user = current_user @account = @user.build_account(account_params) respond_to do |format| if @account.save format.html { redirect_to @account, notice: 'Account was successfully created.' } else format.html { render :new } end end end def account_params params.require(:account).permit(:company_name, :user_id) end

这是代码:

accounts_controller.rb

class Account < ApplicationRecord
  belongs_to :user
end

车型/ account.rb

class User < ApplicationRecord
  include Clearance::User
  has_one :account
end

车型/ user.rb

qazxswpoi
© www.soinside.com 2019 - 2024. All rights reserved.