內部工具最舒服的地方,就是不用想權限。反正用的人就那幾個,登入即全開。
直到有一天,它要給團隊以外的人看。
我們的多伺服器管理系統一開始純粹是自己用的:把幾台跨作業系統的機器收在一個瀏覽器分頁裡,自動巡檢、AI 排錯、跨機器派遣指令。工程團隊自己人用,沒有任何權限概念。
後來它開始要給團隊成員看、要給客戶看某些專案 —— 「所有人都看得到所有東西」立刻變成問題。別的客戶的專案、機群的維運細節,不該是誰登入都能翻。
這篇講我們補權限時學到的東西,以及另一個看似無關、實際上同樣是「開放給人用」才會浮現的問題:AI 生圖的路由。
一、補權限的第一個決定:隱藏,還是禁用? #
這是整件事最關鍵的一個選擇。
多數系統的做法是禁用:東西還在清單上,但點下去說你沒有權限。實作簡單,前端加個判斷就好。
我們選的是隱藏:沒被開放的專案,完全不出現在清單、也不出現在搜尋結果裡。
差別在哪?
「看得到但點不開」本身就在洩漏資訊。 客戶 A 看到清單上有「客戶 B 的專案」這一列,即使點不進去,他已經知道客戶 B 是你的客戶、正在做什麼名字的專案。
對外開放的場景裡,專案名稱本身就是機密。禁用只擋住了內容,隱藏才擋住了存在。
這個決定的代價是:權限判斷必須做在資料查詢層,不能只做在畫面上。清單要過濾、搜尋要過濾、任何會回傳列表的 API 都要過濾。少做一個地方就漏一個。但這個成本是值得付的,因為「畫面上藏起來、API 還查得到」是最典型的假權限。
二、來源分級:不是每個使用者都要有帳號 #
補權限時很容易直接跳到「做完整的角色權限系統」—— 使用者、角色、權限矩陣、後台管理介面。
我們沒有這樣做,因為當時的實際需求根本不需要。
實際的需求是:管理端要全開,其他來源只能看被開放的專案。所以我們用連線來源分級:依來源決定能力範圍,管理端全部功能,受限來源只看開放清單內的專案、而且是唯讀 —— 只能查,不能操作。
這個做法的好處是不用先建一套帳號體系就能把最危險的洩漏擋掉。等到真的出現「同一個來源要有不同權限的人」,再往上補角色也不遲。
補權限的順序建議:先擋住「不該被看到的東西」,再處理「誰是誰」。 反過來做的話,會在還沒擋住洩漏之前,先花好幾週做帳號管理。
三、能執行指令的系統,要有白名單 #
只讀的權限是一回事,能對機器下指令是另一回事。
這套系統可以跨機器派遣指令 —— 這是它最有價值的功能,也是最危險的功能。這裡我們的處理是目標主機走白名單:能被派遣的機器是列舉出來的,不在名單上的一律不接受。
這不只是防惡意,更多是防手滑。維運事故裡,誤操作的比例遠高於惡意攻擊。 一個明確的白名單,能擋掉「指令打對了但機器選錯了」這種代價很高的錯誤。
同樣的邏輯也用在管理面板:機群維運狀態、伺服器清單這類卡片只給管理端看。受限來源連「我們有幾台機器」都不需要知道。
四、另一個開放才會遇到的問題:AI 生圖產出中文亂碼 #
補完權限之後,我們把另一件每天在做的事也收進系統裡:畫圖。
工程團隊每天都要畫架構圖、流程圖、給客戶的說明圖。傳統流程是「另開繪圖軟體 → 手拉 → 匯出 → 貼回文件」,做一張圖比寫一段程式還久。
把它收進對話流之後,馬上撞到一個問題:AI 生圖模型畫中文字,幾乎必然變成亂碼或錯字。
而且是不穩定的錯 —— 重生一次可能對了、再生一次又錯。架構圖上的專案名稱、版本號、欄位名稱,全部不能信。
解法:兩個指令,明確分流 #
我們沒有試圖「把生圖模型調教到會寫中文」(這條路走不通),而是把需求分成兩類,各走各的路:
| 指令 | 走哪條路 | 適合什麼 |
|---|---|---|
/image |
影像生成模型 | 照片級視覺、產品情境、海報素材 |
/chart |
先寫 HTML + CSS,再用瀏覽器轉成圖 | 含中文標籤的圖表、架構圖、流程圖 |
關鍵在第二條路:圖表不是「畫」出來的,是「排版」出來的。 文字交給瀏覽器渲染,中文字型、對齊、數字全部精確可控,而且要改內容就改 HTML 再轉一次,不用祈禱模型這次會生對。
這個分流讓中文圖表變成一次就對,而不是反覆重生撞運氣。你現在看到的這個網站上的架構圖,就是用這套流程做的。
附帶的好處:可維護 #
HTML 產出的圖有個生圖模型給不了的優點 —— 它可以被修改。數字更新了、產品名稱改了,改幾行 HTML 重轉即可,版面完全一致。生圖模型重畫一次,整張圖的構圖都會變。
五、回頭看:內部工具走向對外,會遇到的三件事 #
把這段經驗抽出來,任何內部工具要開放給外部時,大概都會遇到同樣三關:
| 關卡 | 內部工具的預設 | 對外要改成 |
|---|---|---|
| 可見範圍 | 登入即全開 | 隱藏而非禁用,且要做在查詢層 |
| 操作能力 | 誰都能執行 | 危險操作走白名單,唯讀是預設 |
| 產出品質 | 自己看懂就好 | 要能交付給客戶,細節不能出錯 |
第三點最容易被低估。內部用的時候,圖表上的字歪一點、錯一個,自己人看得懂就算了;要交到客戶手上,那就是品質問題。
如果你手上也有這種「本來自己用、現在要給外面看」的系統,最值得先做的其實不是加功能,而是盤點一次:現在登入的人,實際上能看到什麼、能做到什麼。這份清單通常會比想像中長。
需要有人一起盤,或想聊聊多伺服器管理該怎麼收斂,歡迎直接找我們。
