用户认证设计,用户是人吗?
Posted
技术标签:
【中文标题】用户认证设计,用户是人吗?【英文标题】:User authentication design, are users people? 【发布时间】:2011-12-03 17:13:52 【问题描述】:应用程序是用 Ruby on Rails 编写的,但我面临的问题更多是设计问题,而不是语言相关问题。
系统为多个用户提供服务以维护注册表。所以它把人与物联系起来。因此,它有一个名为 Person 的模型代表所有者,它有一个名为 User 的模型代表那些管理注册表的人。
现在出现了一项新要求,允许人们登录并能够更改原始设计不需要的个人详细信息。
问题是如何重构应用程序以允许这个新要求进入?
一个简单的解决方案是为每个请求登录凭据并将用户链接到个人实体的人创建用户,但这不是很干,因为名字、姓氏等某些字段在两个类中,特别是,这正是人们将能够改变的数据。此外,User 和 Person 存储在不同的表中。
我正在考虑的另一种可能性是让一个扩展另一个,但是将数据放在单独的表中会有点混乱。此外,逻辑扩展将是 User
最后一个选项可能是废弃 User 并将登录凭据移至 Person 中,让那些不会登录的人的登录字段为空,而那些刚刚登录的人的一半字段为空。
你能想出更好的解决方案吗?
【问题讨论】:
【参考方案1】:如果您要自下而上编写应用程序,您可以考虑理想情况下这应该如何工作,然后找出如何在它和您当前的设置之间做出合理的折衷。以下是一些通用输入。
由于涉及身份验证,您需要一个可以进行身份验证的“身份”。这可以是例如一个电子邮件地址和一个关联的密码,以及电子邮件验证。
一个身份可能与多个“角色”相关联,使用该身份进行身份验证的人可以选择执行哪个角色,例如“我现在是管理员”与“我现在是普通站点用户”,角色定义了用户当前对登录身份的权限。或者,如果您不需要那种复杂程度,您可以说身份是一个(单一)角色。
您需要在可能的“权利”和用户执行的角色之间进行一些跟踪。例如。最简单的设置可能是 Identity 或 Role 具有一些 boolean can_edit_profile 或 can_modify_registry 属性。
每当用户尝试执行需要某些权限的操作时,只需查找为用户正在执行的角色设置的相应权限,以检查是否允许用户继续。
对于您的应用程序,这可能只涉及为您的用户对象添加一个“can_change_registry”属性,并检查该属性对于访问该站点该部分的任何代码是否为 True。
【讨论】:
以上是关于用户认证设计,用户是人吗?的主要内容,如果未能解决你的问题,请参考以下文章