如何使用管理员设置多租户Rails应用

时间:2018-10-31 14:19:58

标签: ruby-on-rails ruby devise multi-tenant apartment-gem

我对如何正确设置Rails应用程序的模型有疑问。我将使用gem Apartment进行多租户,并使用gem Devise进行身份验证。

我想要实现的是,我将拥有3个用户级别。 管理员所有者用户

管理员基本上可以处理网站中的所有所有者,他可以添加,编辑和删除所有者。假设管理员拥有整个网站(https://example.com)。

所有者将处理用户,他可以添加,编辑和删除用户。如果管理员拥有(https://example.com),则所有者仅拥有(https://owner1.example.com)。

每个子域都有自己的用户,由所有者处理。并且所有所有者均由管理员处理。

我目前提出的是2种型号。

  • 网站帐户
  • UserAccount

网站帐户将具有子域 owner_name 列。 UserAccount将具有电子邮件密码 user_level 。其中user_level可以是所有者用户

然后将Devise用于 UserAccount 模型。 UserAccount模型将仅显示基于子域的数据。

现在的问题是 admin 帐户在哪里?

我是否为此创建一个单独的模型,并且还使用Devise gem?

2 个答案:

答案 0 :(得分:0)

我认为您可以使用相同的表,仅向每个用户,管理员,所有者和用户添加角色(角色的表不同,或者每个角色的布尔属性),然后仅对此条件或某些before_filter进行条件验证即可该特定类型的用户可以访问不同的视图或执行某些操作。似乎不太复杂。

答案 1 :(得分:0)

如果您正在使用公寓gem,则需要为'admin'创建一个新的Devise用户模型(例如AdminUser),并将该模型添加到公寓配置文件中的config.excluded_models中:https://github.com/influitive/apartment#excluding-models 。这将使AdminUsers记录在顶级域中可用。您不能只向UserAccount模型添加角色,因为这些记录的范围仅限于每个公寓的“租户”。

您还需要将WebsiteAccount添加到公寓的config.excluded_models中,以允许在example.com上对其进行管理。这是假设您希望WebsiteAccount成为您的公寓“租户”。

要管理每个WebsiteAccount的UserAccount,您需要在每个WebsiteAccount的子域中进行管理,或者在example.com上进行一些租户切换,以访问并为UserAccount分配一个WebsiteAccount。