用户认证设计,是用户的人吗?

时间:2011-12-03 17:13:52

标签: authentication

应用程序是用Ruby on Rails编写的,但我遇到的问题更多的是设计问题而不是语言相关。

系统为许多用户提供维护注册表的服务。因此它将人与事物联系起来。因此,它有一个名为Person的模型代表所有者,它有一个名为User的模型,代表管理注册表的人。

现在出现了一项新要求,允许人们登录并能够更改原始设计不需要的个人详细信息。

问题是如何重构应用程序以允许这个新要求?

一个简单的解决方案是为每个请求登录凭据并将用户链接到人员实体的人创建用户,但这不是很干,因为某些字段(如名字,姓氏等)都在这两个类中,特别是,这正是人们将能够改变的数据。除了用户和个人存储在单独的表中。

我正在考虑的另一种可能性是让一个扩展另一个但是在分离的表中使用数据会使它有点混乱。此外,逻辑扩展名为User< - Person,因为用户(通常)是一个人但是考虑实现Person< - User非常容易。

最后一个选项可能是废弃用户并将登录凭据移到Person中,对于那些不登录的人来说,登录字段为空,而对于那些刚刚登录的人来说,有一半的字段为空。

您能想到更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

如果你自下而上编写应用程序,然后弄清楚如何在它和你当前的设置之间做出合理的折衷,你可以考虑如何理想地工作。以下是一些通用输入。

由于涉及身份验证,您需要一个可以进行身份​​验证的“身份”。这可以是例如电子邮件地址和相关密码,以及电子邮件验证。

身份可能与多个“角色”相关联,并且使用该身份进行身份验证的人可以选择要执行的角色,例如“我现在是管理员”与“我现在是常规站点用户”,该角色定义了用户对登录身份的当前权限。或者,如果您不需要这种复杂程度,您可以说身份是(单个)角色。

您需要在可能的“权限”和用户正在执行的角色之间进行一些跟踪。例如。最简单的设置可能是Identity或Role有一些布尔值can_edit_profile或can_modify_registry属性。

每当用户尝试执行需要某些权限的操作时,只需查找用户正在执行的角色的相应权限集,以检查是否允许用户继续操作。

对于您的应用程序,这可能只涉及为您的用户对象添加'can_change_registry'属性,并检查访问该部分网站的任何代码的该属性是否为True。