【问题标题】:Rails app as backend for multiple appsRails 应用程序作为多个应用程序的后端
【发布时间】:2015-06-23 09:53:11
【问题描述】:

我们正在开发一个 Rails 应用程序,它将作为多个应用程序的后端。 Rails 应用程序将有一个网络 CMS,允许管理员用户管理他们的移动应用程序(一个管理员用户可以拥有 1..N 个移动应用程序)。

同样的 Rails 应用也将作为这些移动应用的 API。移动应用程序彼此完全分离,彼此之间不共享任何数据。我们有不同角色的用户(global_admin 在 CMS 中管理他的应用,place_manager 在 CMS 中管理他在应用中的位置,以及 users 的移动应用程序)。这些用户不会在应用程序之间共享(如果用户在移动应用程序中注册,他将能够在该应用程序中登录;因此,如果他想登录另一个移动应用程序,他需要重新注册)。

实现这一目标的最佳方法是什么?我们正在考虑:

  • 选项 1:我们可以有一个 User 模型,在不同的应用程序上具有不同的角色(global_admin 在应用程序 1 上,user 在应用程序 2 上,manager 在应用程序 3 上......)。如果用户注册了应用 1,则会创建一条记录,而如果他注册了应用 2,我们只会为其添加一个角色,但他认为他创建了一个新帐户。李>
  • 选项 2:我们可以在每个应用上为每个用户创建一条记录(取消电子邮件字段的唯一性约束)
  • 选项 X:想法?

提前谢谢你

【问题讨论】:

  • 您的移动应用程序是否共享相同的 API 结构?
  • 是的,它们是 100% 相等的

标签: ruby-on-rails


【解决方案1】:

API/API 用户场景类似于多租户情况,其中每个应用都作为单独的实例运行。您可以查看 Apartment 之类的数据库级别多租户,或 Milia 应用级别多租户。

数据库级别通常更易于管理,但您需要针对全局管理员要求的解决方法。

【讨论】:

  • 谢谢,我去看看
【解决方案2】:

如果您想将单个rails 应用程序用于多个移动应用程序,我建议采用以下方法。

  1. 对于 users,您可以让不同的 API 返回不同类型的 users,具体取决于应用程序要求。
  2. 使用STI 区分每个应用的用户(这样,您可以只有一个用户表,但模型不同)

【讨论】:

  • 这里不知道STI对我们有什么帮助,用户在不同的app里应该有不同的密码、数据等,应该是动态创建的
【解决方案3】:

这些用户不会在应用之间共享(如果用户在 移动应用程序,他将只能在该应用程序中登录;所以如果他想要 登录另一个他需要重新注册的移动应用程序)。

在我看来,这是三个不同的 Rails 应用程序。显然,这些应用程序没有任何共同点,尤其是没有共享数据。

【讨论】:

  • 感谢您的回复。没错,但我们需要将它们全部保存在同一个 Rails 应用程序中,以自动创建新的移动应用程序(我们的 Rails 应用程序是一个创建和管理不同移动应用程序的平台)。
  • 您可以在同一台机器上拥有多个 Rails 应用程序。这可能对你有用吗?
  • 这可行,但我们需要将所有内容保存在同一个应用中
  • 您能否列出使您相信所有应用程序都必须在一个 Rails 应用程序中的要求?我认为让三个应用程序在同一台机器上共存是一个更好的设计。如有必要,它们可以在同一个操作系统中进行交互,或者您可以简单地使用适当的 API 让它们相互交互。
  • 我们希望管理员用户能够动态创建新应用。这是主要要求
【解决方案4】:

我认为选项 1 适合您的情况。您可以在appsusers 之间设置has_many :through 关系,其中将包含有关该特定应用程序的用户角色的信息(假设每个应用程序每个用户只有一个角色)。

使用这种方法,工作流程会与您描述的有所不同。如果用户根本没有注册(即不存在该电子邮件的记录),他们将需要注册(电子邮件+密码),此时您将创建用户记录(使用散列密码)并设置与移动设备的关联应用。如果用户 IS 已经注册,您不希望他们再次输入新密码,您只需设置关联即可。这可以通过first_or_create 处理。希望这会有所帮助。

【讨论】:

  • 谢谢。问题是不同应用程序的用户应该有不同的密码、头像等(管理员用户知道他们在一个拥有多个移动应用程序的平台上,但这些移动应用程序的用户不知道,他们应该认为他们在一个孤立的应用程序
  • 嗯,我明白了。那么用户如何决定他们登录的应用程序呢?是否有一个登录表单,或者每个移动应用程序都有自己的登录表单?
  • 这是问题之一。移动用户在特定的移动应用程序中登录(我有应用程序 ID,因此我们可以轻松登录)。 CMS 用户从共享登录页面登录,因此他们的电子邮件必须是唯一的
  • 好的,我明白了。那么,管理多个应用程序的 admin 级别用户不需要每个应用程序单独的电子邮件/密码组合,但这些应用程序的用户需要单独的电子邮件/密码组合,这是否公平?
  • 就是这样
猜你喜欢
  • 2011-07-19
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-28
  • 2016-07-10
相关资源
最近更新 更多