当你意识到你在项目开始时做的轻量、简单的设想竟然完全错了时,你已经用了六个月的时间投入到这个项目上 。
现在你需要解决这些问题,才能让这个系统继续运行下去,你发现你用在这个项目上的精力远远超出了你的预期,如果一开始就用正确的方式来做,就不会发生这样的事 。
文章插图
今天,我要告诉你的是一个经常犯的错误,一个会给你带来无穷无尽的问题的单词,那就是“users” 。
这个单词有两个最基本的错误:
- 对你的需求来说 “User” 几乎从来都不是一个好的描述 。
- “User” 会导致一个基本的设计安全缺陷 。
你没有使用者最开始,没有任何一个软件系统真的有使用者存在 。乍一看“user”是一个好的描述,但是你稍微一想就会意识到你的业务逻辑实际上比这要复杂的多 。
【永远不要在代码中使用“User”这个单词】我会使用三个例子,从一个极端的情况出发 。
机票预订系统没有“users”我曾经给机票预订系统写过访问控制逻辑,下面只是一小部分需求:
- 旅客可以使用预定记录码通过网站查看预定信息 。
- 购买者可以通过信用卡号后四位数在网站上修改预订信息 。
- 旅行社可以查看和修改他们的预订 。
- 航空公司的值机人员可以根据角色和航空公司来查看和修改预订信息,这需要旅客提供身份信息 。
Unix 没有 “users”我们看一个不太一样的例子 。Unix (这些天被称为POSIX)有用户,他们可以登录并执行代码 。这样看起来很不错吧?我们深入看一下 。
如果我们把所有都当作“users”的话,我们将会有:使用终端或者图形界面登录的人
- 像邮件或者web服务器这种系统服务也会以“users”的身份运行,例如Nginx可以以httpd用户运行 。
- 在服务器上经常会有多人共享一个管理员账号用来SSH登录(例如,亚马逊的Ubuntu虚拟机默认SSH账号就是‘ubuntu’)
- root 身份,和上面其他身份都不同 。
在操作上,因为POSIX的用户模型边界存在,我们甚至不能找到一种方式说“只能让 Alice 和 Bob 通过这个账号登录” 。
SaaS 服务提供商没有 “users”Jeremy Green 最近就用户模型在SaaS中的应用在推特上发文,它第一次提醒了我写下这篇文章,他的基本观点是SaaS 服务几乎总是:
- 某个组织中的一个人支付服务费用 。
- 一个或多个人共同使用这个服务 。
但是这只是众多例子中的一个:“users”的概念太模糊了 。如果你开始怀疑“user”这个词,最终你可能发现最终你其实只需要两个概念:团队(用来组织关系和支付)和成员(实际使用服务的人) 。
“Users” 是一个安全问题“user” 这个单词不仅是业务逻辑的问题,它也导致了一系列安全问题 。“user” 这个单词如此的模糊以至于从根本上将两个概念合并了:
- 一个人 。
- 他们在软件中的代表性 。
因为浏览器是以系统用户的身份运行的,它被认为与人类身份的你相同,实际上你们是不同的 。 你作为’user’,不想上传文件 。但是系统的账号也是‘user’,能够上传文件,如果浏览器运行在你的账号之下,他所有的行为会被当作是你的意图,也就是说是你让它这么做的,实际上不是 。
推荐阅读
- 科普中国回应:美国并不能通过根服务器让中国网络“瘫痪”
- 为什么网吧电脑配置不高,玩起来却从来不卡?
- 3种不值得买的二手硬件盘点:最好别碰
- 为何视频流/网游大都使用UDP协议,而不用TCP协议?
- 现在淘宝卖衣服是不是一定要有实体店 自己可以开网店卖衣服嘛
- 网店生意不好怎么办 开店生意不好怎么办
- 宝宝春季如何穿衣不着凉 试试这些增减衣物的办法
- 茶叶喝多会不会伤胃,正山小种养胃还是伤胃
- 茶不可日或无,砖茶为什么又叫边销茶
- 程序员|不招35岁以上的程序员,真的有利企业发展吗?