当你意识到你在项目开始时做的轻量、简单的设想竟然完全错了时,你已经用了六个月的时间投入到这个项目上。
现在你需要解决这些问题,才能让这个系统继续运行下去,你发现你用在这个项目上的精力远远超出了你的预期,如果一开始就用正确的方式来做,就不会发生这样的事。今天,我要告诉你的是一个经常犯的错误,一个会给你带来无穷无尽的问题的单词,那就是“users”这个单词有两个最基本的错误:
- 对你的需求来说 “User” 几乎从来都不是一个好的描述。
- “User” 会导致一个基本的设计安全缺陷。“user” 的概念是模糊不清的,使用更精准的术语几乎总是能起到更好的效果。
你没有使用者
最开始,没有任何一个软件系统真的有使用者存在。乍一看“user”是一个好的描述,但是你稍微一想就会意识到你的业务逻辑实际上比这要复杂的多。我会使用三个例子,从一个极端的情况出发。机票预订系统没有“users”我曾经给机票预订系统写过访问控制逻辑,下面只是一小部分需求:
- 旅客可以使用预定记录码通过网站查看预定信息。
- 购买者可以通过信用卡号后四位数在网站上修改预订信息。
- 旅行社可以查看和修改他们的预订。
- 航空公司的值机人员可以根据角色和航空公司来查看和修改预订信息,这需要旅客提供身份信息。
不再一一列举。一些与人类相关的基本概念是“旅客”,“代理”(网站也可是看作代理)和“购买者”。“user”这个概念根本没用,并且在许多请求中我根本不会使用这个单词,举个例子,我们的请求必须包括旅客和代理人的证件,而不是使用者的证件。
Unix 没有 “users”
我们看一个不太一样的例子。Unix (这些天被称为POSIX)有用户,他们可以登录并执行代码。这样看起来很不错吧?我们深入看一下。如果我们把所有都当作“users”的话,我们将会有:- 使用终端或者图形界面登录的人
- 像邮件或者web服务器这种系统服务也会以“users”的身份运行,例如nginx可以以httpd用户运行。
- 在服务器上经常会有多人共享一个管理员账号用来SSH登录(例如,亚马逊的Ubuntu虚拟机默认SSH账号就是‘ubuntu’)
- root 身份,和上面其他身份都不同。
SaaS 服务提供商没有 “users”
Jeremy Green 最近就用户模型在SaaS中的应用在推特上发文,它第一次提醒了我写下这篇文章,他的基本观点是SaaS 服务几乎总是:- 某个组织中的一个人支付服务费用。
- 一个或多个人共同使用这个服务。
“Users” 是一个安全问题
“user” 这个单词不仅是业务逻辑的问题,它也导致了一系列安全问题。“user” 这个单词如此的模糊以至于从根本上将两个概念合并了:- 一个人。
- 他们在软件中的代表性。