千家信息网

User这个词为什么不要在代码中使用

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,今天给大家介绍一下User这个词为什么不要在代码中使用。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。当你意识到你在项目
千家信息网最后更新 2026年11月03日User这个词为什么不要在代码中使用

今天给大家介绍一下User这个词为什么不要在代码中使用。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。

当你意识到你在项目开始时做的轻量、简单的设想竟然完全错了时,你已经用了六个月的时间投入到这个项目上。
现在你需要解决这些问题,才能让这个系统继续运行下去,你发现你用在这个项目上的精力远远超出了你的预期,如果一开始就用正确的方式来做,就不会发生这样的事。

今天,我要告诉你的是一个经常犯的错误,一个会给你带来无穷无尽的问题的单词,那就是"users"

这个单词有两个最基本的错误:

  1. 对你的需求来说 "User" 几乎从来都不是一个好的描述。
  2. "User" 会导致一个基本的设计安全缺陷。"user" 的概念是模糊不清的,使用更精准的术语几乎总是能起到更好的效果。

你没有使用者

最开始,没有任何一个软件系统真的有使用者存在。乍一看"user"是一个好的描述,但是你稍微一想就会意识到你的业务逻辑实际上比这要复杂的多。

我会使用三个例子,从一个极端的情况出发。机票预订系统没有"users"

我曾经给机票预订系统写过访问控制逻辑,下面只是一小部分需求:

  1. 旅客可以使用预定记录码通过网站查看预定信息。
  2. 购买者可以通过信用卡号后四位数在网站上修改预订信息。
  3. 旅行社可以查看和修改他们的预订。
  4. 航空公司的值机人员可以根据角色和航空公司来查看和修改预订信息,这需要旅客提供身份信息。

不再一一列举。一些与人类相关的基本概念是"旅客","代理"(网站也可是看作代理)和"购买者"。"user"这个概念根本没用,并且在许多请求中我根本不会使用这个单词,举个例子,我们的请求必须包括旅客和代理人的证件,而不是使用者的证件。

Unix 没有 "users"

我们看一个不太一样的例子。Unix (这些天被称为POSIX)有用户,他们可以登录并执行代码。这样看起来很不错吧?我们深入看一下。

如果我们把所有都当作"users"的话,我们将会有:

  1. 使用终端或者图形界面登录的人
  2. 像邮件或者web服务器这种系统服务也会以"users"的身份运行,例如nginx可以以httpd用户运行。
  3. 在服务器上经常会有多人共享一个管理员账号用来SSH登录(例如,亚马逊的Ubuntu虚拟机默认SSH账号就是‘ubuntu’)
  4. root 身份,和上面其他身份都不同。

上面四个是几乎不同的概念,但是在POSIX上他们都是 "users". 一会儿我们就会看到,把这些概念都称为‘user’会导致很多安全问题。

在操作上,因为POSIX的用户模型边界存在,我们甚至不能找到一种方式说"只能让 Alice 和 Bob 通过这个账号登录"。

SaaS 服务提供商没有 "users"

Jeremy Green 最近就用户模型在SaaS中的应用在推特上发文,它第一次提醒了我写下这篇文章,他的基本观点是

SaaS 服务几乎总是:

  1. 某个组织中的一个人支付服务费用。
  2. 一个或多个人共同使用这个服务。

如果你一开始就把这些人作为一个用户,你将会陷入一个痛苦的世界。你无法建立团队模型,你无法组建同时为多人支付的模型,然后你就会开始改造你的系统。现在你在SaaS案例中学到了一课,我们来看一看你的生活。

但是这只是众多例子中的一个:"users"的概念太模糊了。如果你开始怀疑"user"这个词,最终你可能发现最终你其实只需要两个概念:团队(用来组织关系和支付)和成员(实际使用服务的人)。

"Users" 是一个安全问题

"user" 这个单词不仅是业务逻辑的问题,它也导致了一系列安全问题。

"user" 这个单词如此的模糊以至于从根本上将两个概念合并了:

  1. 一个人。
  2. 他们在软件中的代表性。

为了说明这个问题,假设你正在访问一个居心不良的网站,在它服务器上的图片导致了你的浏览器内存溢出。远程网站控制着你的浏览器,并且开始将你的文件上传到他的服务上。

为什么它能这样做?

因为浏览器是以系统用户的身份运行的,它被认为与人类身份的你相同,实际上你们是不同的。你作为user,不想上传文件。但是系统的账号也是‘user’,能够上传文件,如果浏览器运行在你的账号之下,他所有的行为会被当作是你的意图,也就是说是你让它这么做的,实际上不是。

这就是被称为Confused Deputy的问题。如果你使用"用户"这个词来描述两个根本不同的东西,那么这个问题就更有可能成为你设计的一部分。

前期设计的价值

花更少的功夫处理相同的问题是成为高产程序员的关键。使用模糊不清的概念比如"用户"来组织你的软件,将会话费大量时间和精力来解决未来发生的问题。一上来就开始编码看起来是高产的,事实恰好相反。

下次你开始一个新的软件项目时,花几个小时预先确定你的术语和概念:你仍然不会完全正确,但你会做得更好。未来的你将感谢你所做的所有预防浪费的工作。

以上就是User这个词为什么不要在代码中使用的全部内容了,更多与User这个词为什么不要在代码中使用相关的内容可以搜索之前的文章或者浏览下面的文章进行学习哈!相信小编会给大家增添更多知识,希望大家能够支持一下!

问题 概念 服务 用户 系统 身份 单词 网站 账号 浏览 运行 预订 代码 不同 安全 两个 例子 信息 实际 旅客 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技创新与互联网经济 致骋互联网科技 互联网科技logo 上海亿帐通互联网科技 佰商互联网科技有限公司 滨湖区互联网智能科技产品供应 无锡溥仪互联网科技有限公司 互联网科技公司招聘 宁夏众和广鑫互联网科技有限公司 华夏恒生互联网科技013171 佛山市翊博互联网络科技有限公司 无锡工业互联网科技有限公司 美国互联网科技实力 每天都有哪些好的互联网科技 银行科技岗属于互联网吗 张召忠谈中国互联网科技 下一代互联网重大应用科技园 西安左小互联网科技有限公司 互联网科技创新创业项目 北京品多多互联网科技有限公司 深圳市人人互联网科技有限公司 互联网金融与金融科技 丰台科技园 互联网公司 北京大学互联网科技怎么样 互联网科技有哪些公司 互联网为啥属于高科技 移动互联网科技公司 工业互联网等科技实现智能化赋能 怎样加入科技互联网 广州百诚互联网科技有限公司官网
0