0

我正在尝试构建一个类似于 CRM 的 rails 应用程序,其中我有用户,并且每次使用都有许多“客户”。

最初,我为用户和客户端创建了一个模型,但是在编写单元测试时,我意识到这两个非常相似。

所以我的问题是:我最初对它们分别建模的设计决定是否正确?或者有没有更好的方法来重用代码,即使我没有预见到客户能够真正登录到系统?

我看过类似的问题,但它们都适用于不同的用户类型和角色。在这种情况下,客户端仅作为模型存在,永远不会真正成为用户。

4

2 回答 2

1

在任何 CRM 应用程序中,User 和 Client 之间都有相同点和不同点。让我们放一些细节

相似之处

  • 用户和客户共享各种属性,尤其是与个人信息(姓名、联系信息等)相关的属性。
  • 两者(大部分)都代表一个且只有一个与系统有关系的人。一个明显的例外是系统用户。

差异

  • 用户访问系统。这意味着安全需求,例如身份验证、识别和授权,这反过来又意味着一些验证(密码、证书等)
  • 在 CRM 中,客户通常与客户、公司、团队、客户经理等有各种关系,而用户则没有。即使这不是由模型处理的,但您可能会选择对某些字段进行一些模型级别的验证

因此,选择在两个不同的模型中分离用户和客户端、将它们组合或从父级子类化是基于您的实际需要的选择。有一些系统(例如OpenERP,如果我没记错的话)以相同的方式对待 Client 和 User ,同时定义一个is_system_user属性。出于上述差异和安全原因,我个人会选择将它们分开。如果您不确定自己的需要,将它们分开会更安全(虽然不是 DRY'er)。

于 2013-09-22T22:07:28.627 回答
0

也许你应该给用户一个类型(例如通过创建一个类型模型并建立一个 has_many/belongs_to ActiveRecord 关联):这样一个用户就可以是一个客户或任何你想要的东西。

然后,您可以根据用户的类型使用cancan(一个非常棒的 gem)来管理用户权限。

于 2013-09-22T21:06:09.753 回答