永遠(yuǎn)不要代碼中使用「User」這個(gè)單詞!

      網(wǎng)友投稿 588 2022-05-30

      ·????? 你沒有使用者

      §? 機(jī)票預(yù)訂系統(tǒng)沒有“users”

      §? Unix 沒有 “users”

      §? SaaS 服務(wù)提供商沒有 “users”

      ·????? “Users” 是一個(gè)安全問題

      ·????? 前期設(shè)計(jì)的價(jià)值

      當(dāng)你意識(shí)到你在項(xiàng)目開始時(shí)做的輕量、簡(jiǎn)單的設(shè)想竟然完全錯(cuò)了時(shí),你已經(jīng)用了六個(gè)月的時(shí)間投入到這個(gè)項(xiàng)目上。現(xiàn)在你需要解決這些問題,才能讓這個(gè)系統(tǒng)繼續(xù)運(yùn)行下去,你發(fā)現(xiàn)你用在這個(gè)項(xiàng)目上的精力遠(yuǎn)遠(yuǎn)超出了你的預(yù)期,如果一開始就用正確的方式來做,就不會(huì)發(fā)生這樣的事。

      今天,我要告訴你的是一個(gè)經(jīng)常犯的錯(cuò)誤,一個(gè)會(huì)給你帶來無窮無盡的問題的單詞,那就是“users”。

      這個(gè)單詞有兩個(gè)最基本的錯(cuò)誤:

      1.? 對(duì)你的需求來說 “User” 幾乎從來都不是一個(gè)好的描述。

      2.? “User” 會(huì)導(dǎo)致一個(gè)基本的設(shè)計(jì)安全缺陷。

      “user” 的概念是模糊不清的,使用更精準(zhǔn)的術(shù)語幾乎總是能起到更好的效果。

      你沒有使用者

      最開始,沒有任何一個(gè)軟件系統(tǒng)真的有使用者存在。乍一看“user”是一個(gè)好的描述,但是你稍微一想就會(huì)意識(shí)到你的業(yè)務(wù)邏輯實(shí)際上比這要復(fù)雜的多。

      我會(huì)使用三個(gè)例子,從一個(gè)極端的情況出發(fā)。

      機(jī)票預(yù)訂系統(tǒng)沒有“users”

      我曾經(jīng)給機(jī)票預(yù)訂系統(tǒng)寫過訪問控制邏輯,下面只是一小部分需求:

      ·????? 旅客可以使用預(yù)定記錄碼通過網(wǎng)站查看預(yù)定信息。

      ·????? 購(gòu)買者可以通過信用卡號(hào)后四位數(shù)在網(wǎng)站上修改預(yù)訂信息。

      ·????? 旅行社可以查看和修改他們的預(yù)訂。

      ·????? 航空公司的值機(jī)人員可以根據(jù)角色和航空公司來查看和修改預(yù)訂信息,這需要旅客提供身份信息。

      不再一一列舉。一些與人類相關(guān)的基本概念是“旅客”,“代理”(網(wǎng)站也可是看作代理)和“購(gòu)買者”。“user”這個(gè)概念根本沒用,并且在許多請(qǐng)求中我根本不會(huì)使用這個(gè)單詞,舉個(gè)例子,我們的請(qǐng)求必須包括旅客和代理人的證件,而不是使用者的證件。

      Unix 沒有 “users”

      我們看一個(gè)不太一樣的例子。Unix (這些天被稱為POSIX)有用戶,他們可以登錄并執(zhí)行代碼。這樣看起來很不錯(cuò)吧?我們深入看一下。

      如果我們把所有都當(dāng)作“users”的話,我們將會(huì)有:使用終端或者圖形界面登錄的人

      ·????? 像郵件或者web服務(wù)器這種系統(tǒng)服務(wù)也會(huì)以“users”的身份運(yùn)行,例如nginx可以以httpd用戶運(yùn)行。

      ·????? 在服務(wù)器上經(jīng)常會(huì)有多人共享一個(gè)管理員賬號(hào)用來SSH登錄(例如,亞馬遜的Ubuntu虛擬機(jī)默認(rèn)SSH賬號(hào)就是‘ubuntu’)

      ·????? root 身份,和上面其他身份都不同。

      上面四個(gè)是幾乎不同的概念,但是在POSIX上他們都是 “users”.?一會(huì)兒我們就會(huì)看到,把這些概念都稱為‘user’會(huì)導(dǎo)致很多安全問題。

      在操作上,因?yàn)镻OSIX的用戶模型邊界存在,我們甚至不能找到一種方式說“只能讓 Alice 和 Bob 通過這個(gè)賬號(hào)登錄”。

      SaaS 服務(wù)提供商沒有 “users”

      Jeremy Green 最近就用戶模型在SaaS中的應(yīng)用在推特上發(fā)文,它第一次提醒了我寫下這篇文章,他的基本觀點(diǎn)是SaaS 服務(wù)幾乎總是:

      1.? 某個(gè)組織中的一個(gè)人支付服務(wù)費(fèi)用。

      2.? 一個(gè)或多個(gè)人共同使用這個(gè)服務(wù)。

      如果你一開始就把這些人作為一個(gè)用戶,你將會(huì)陷入一個(gè)痛苦的世界。你無法建立團(tuán)隊(duì)模型,你無法組建同時(shí)為多人支付的模型,然后你就會(huì)開始改造你的系統(tǒng)。現(xiàn)在你在SaaS案例中學(xué)到了一課,我們來看一看你的生活。

      但是這只是眾多例子中的一個(gè):“users”的概念太模糊了。如果你開始懷疑“user”這個(gè)詞,最終你可能發(fā)現(xiàn)最終你其實(shí)只需要兩個(gè)概念:團(tuán)隊(duì)(用來組織關(guān)系和支付)和成員(實(shí)際使用服務(wù)的人)。

      “Users” 是一個(gè)安全問題

      “user” 這個(gè)單詞不僅是業(yè)務(wù)邏輯的問題,它也導(dǎo)致了一系列安全問題。“user” 這個(gè)單詞如此的模糊以至于從根本上將兩個(gè)概念合并了:

      ·????? 一個(gè)人。

      ·????? 他們?cè)谲浖械拇硇浴?/p>

      為了說明這個(gè)問題,假設(shè)你正在訪問一個(gè)居心不良的網(wǎng)站,在它服務(wù)器上的圖片導(dǎo)致了你的瀏覽器內(nèi)存溢出。遠(yuǎn)程網(wǎng)站控制著你的瀏覽器,并且開始將你的文件上傳到他的服務(wù)上。為什么它能這樣做?

      因?yàn)闉g覽器是以系統(tǒng)用戶的身份運(yùn)行的,它被認(rèn)為與人類身份的你相同,實(shí)際上你們是不同的。?你作為’user’,不想上傳文件。但是系統(tǒng)的賬號(hào)也是‘user’,能夠上傳文件,如果瀏覽器運(yùn)行在你的賬號(hào)之下,他所有的行為會(huì)被當(dāng)作是你的意圖,也就是說是你讓它這么做的,實(shí)際上不是。

      這就是被稱為Confused Deputy的問題。如果你使用“用戶”這個(gè)詞來描述兩個(gè)根本不同的東西,那么這個(gè)問題就更有可能成為你設(shè)計(jì)的一部分。

      前期設(shè)計(jì)的價(jià)值

      花更少的功夫處理相同的問題是成為高產(chǎn)程序員的關(guān)鍵。使用模糊不清的概念比如“用戶”來組織你的軟件,將會(huì)話費(fèi)大量時(shí)間和精力來解決未來發(fā)生的問題。一上來就開始編碼看起來是高產(chǎn)的,事實(shí)恰好相反。

      永遠(yuǎn)不要在代碼中使用「User」這個(gè)單詞!

      下次你開始一個(gè)新的軟件項(xiàng)目時(shí),花幾個(gè)小時(shí)預(yù)先確定你的術(shù)語和概念:你仍然不會(huì)完全正確,但你會(huì)做得更好。未來的你將感謝你所做的所有預(yù)防浪費(fèi)的工作。

      方志朋簡(jiǎn)介:SpringCloud?中國(guó)社區(qū)聯(lián)合創(chuàng)始人,博客訪問量突破一千萬,愛好開源,熱愛分享,活躍于各大社區(qū),保持著非常強(qiáng)的學(xué)習(xí)驅(qū)動(dòng)力,終身學(xué)習(xí)踐行者,終身學(xué)習(xí)受益者。目前就職于國(guó)內(nèi)某家知名互聯(lián)網(wǎng)保險(xiǎn)公司,擔(dān)任DEVOPS?工程師,對(duì)微服務(wù)領(lǐng)域和持續(xù)集成領(lǐng)域研究較深,精通微服務(wù)框架SpringCloud。

      網(wǎng)站

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:git 命令操作總結(jié)
      下一篇:敏捷史話(十七):維基(Wiki)背后的靈感來源—— Ward Cunningham
      相關(guān)文章
      亚洲综合色婷婷在线观看| 亚洲成色www久久网站夜月| 亚洲国产天堂久久综合网站| 亚洲avav天堂av在线网爱情| 亚洲三级在线观看| 亚洲国产一区二区三区在线观看| 久久国产精品亚洲综合| 亚洲精品色在线网站| 亚洲电影在线播放| 亚洲欧洲精品成人久久奇米网| 亚洲国产综合在线| 亚洲成av人片不卡无码| 亚洲乱码中文字幕手机在线| 亚洲AⅤ永久无码精品AA| 亚洲精品国产第1页| 亚洲Aⅴ无码专区在线观看q| 亚洲国产精品无码久久SM| 国产亚洲综合色就色| 精品国产综合成人亚洲区| 亚洲人成中文字幕在线观看| 亚洲日韩国产精品第一页一区| 亚洲中文字幕无码一区| 亚洲无人区一区二区三区| 亚洲日韩乱码中文无码蜜桃臀网站| 在线a亚洲v天堂网2019无码| 亚洲精品无码久久久久去q| 77777亚洲午夜久久多人| 亚洲精品tv久久久久久久久| 亚洲AV中文无码乱人伦下载 | 亚洲伊人久久精品| 亚洲AV一二三区成人影片| 亚洲情A成黄在线观看动漫软件 | 亚洲人成人无码网www电影首页| 亚洲人成在线播放网站| 亚洲最大的成网4438| 亚洲精品一卡2卡3卡三卡四卡| 久久久亚洲AV波多野结衣| 亚洲成av人片在线看片| 亚洲欧美日韩一区二区三区在线| 亚洲AV日韩AV一区二区三曲| 婷婷亚洲天堂影院|