【问题标题】:Design of Rails app with multiple user types using Devise and STI使用 Devise 和 STI 设计具有多种用户类型的 Rails 应用程序
【发布时间】:2014-01-19 06:07:24
【问题描述】:

我对 Rails 比较陌生,到目前为止只编写了一个应用程序。我在该应用程序中使用了 Devise 进行身份验证。现在我开始第二个了,我必须更多地考虑身份验证,因为我有很多用户类型,而不是我的第一个应用程序中的单一用户类型。

我一直在研究这些问题,以便当我将代码放到金属(或云)上时,我可以考虑到清晰的设计。

到目前为止,我发现这篇文章最有用:

背景

我正在创建一个在线市场,客户可以在其中从供应商处订购商品。

我打算创建以下用户类型:

  • 客户:访问市场并订购商品
  • 供应商:在市场上创造东西并处理订单
  • 员工:为供应商工作
  • 超级管理员:管理网站
  • 管理员:管理由超级管理员委派的网站部分

以下字段是我确定的在上述三种用户类型之间共享的字段:

  • 电子邮件地址(用作登录 ID)
  • 手机号码

每个用户类型都有不同的字段(每个 4 - 6 个附加字段)。

客户和供应商将自行注册。员工和管理员将分别由提供商和超级管理员注册。

员工将与提供者相关联。我预计一名员工不会与多个提供商相关联。

我也不预见用户需要拥有多个角色。

我的计划

在对选项进行一些研究后,我决定如下:

我将创建三种不同的用户模型:

  • 客户
  • 提供者
  • 超级管理员

在我看来,这些都是真正不同的用户,他们将与应用程序的不同部分进行交互,所以感觉很干净。根据我的研究,这种方法还允许我为每个用户类别完全定制注册程序。例如,我可以允许客户使用他们的 Facebook 帐户注册(使用 OmniAuth),但不能将此选项扩展到我的提供商。当然,超级管理员根本不会 :registerable。我知道每个用户都有单独的登录页面,这对我来说不是问题(实际上是可取的)。

拥有不同的模型,尤其是对于 Admin 也可以让我在以后轻松重构,以防我确实需要实现其他角色。

问题

上面的设计是否尽可能简单?没有任何作战计划能在与敌人的接触中幸存下来。但我希望 Rails 是我的朋友 :) 所以在纸面上,我的计划对我来说似乎很简单。有什么我遗漏的东西会使它的实现比纸上显示的更复杂吗?

此外,即使我已经制定了上述计划(双关语),我也愿意接受其他建议。例如,我是否有任何理由要对所有模型进行 STI(有一个用户模型,我的所有其他模型都从该模型继承)?

感谢阅读!

【问题讨论】:

  • 您找到解决方案了吗?如果是,你能解释一下你做了什么吗?
  • @andreobrown 我遇到了同样的问题。你有它的解决方案吗?如果是,请解释一下。谢谢。

标签: ruby-on-rails devise single-table-inheritance sti


【解决方案1】:

Rails Cast 有一个非常可靠的解决方案,至少可以处理您的解决方案引入的一些复杂性。 Bates 为 User 模型引入了一个角色属性,该属性封装了用户拥有的一个(或多个角色)。他将此与宝石 CanCan 结合起来,以指示哪个角色可以执行哪些操作。

看看这个http://railscasts.com/episodes/192-authorization-with-cancan?view=asciicast

首先看看他是如何设置和获取角色属性的,然后看看他是如何将其与 CanCan 耦合的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多