登入成功與目前仍有權限要分開
使用者以工程師身分開啟參數畫面後,管理者可能將他改為唯讀。若畫面只在開啟時查一次權限,已開按鈕仍能寫入,就會留下授權缺口。本文帶你建立畫面更新與執行端檢查,使權限變更能影響已存在的操作介面。
案例使用者甲原本可讀取與修改設備A的配方參數,權限版本為12。10:00管理者改為只能讀取,權限版本升為13。畫面應清楚顯示唯讀及變更原因,停止新的修改送出;真正受理請求的一端也應按當前權限拒絕寫入。
先列出操作矩陣:看即時值、開設定頁、修改草稿、提交設定、匯出資料及確認警報,分別對應權限。唯讀不一定代表可匯出所有資料,能看設備A也不代表能看設備B。角色名稱只是管理方式,最後仍要核對使用者、對象與動作。
適用於有登入與授權機制的HMI、Web介面或上位機。本篇不假定特定HMI支援權限變更事件、工作階段撤銷或巨集API。若產品只能重新登入後更新權限,必須記錄此限制並設計可驗證的工作階段失效流程。
先列出所有可以送出操作的入口
檢查的不只是畫面按鈕。鍵盤快捷鍵、彈出視窗、已開分頁、背景佇列、批次提交與外部API,可能都能發出寫入。把入口列成表,再確認每個入口最終是否到同一個可信任授權檢查點,避免漏掉隱藏入口。
畫面收到權限版本13後,先更新目前身分說明,將不再允許的編輯區改為唯讀,並取消尚未送出的寫入排程。草稿可依政策保留供參考,但要標示沒有提交權限;不能因為它是在版本12時輸入,就自動沿用舊權限送出。
伺服器收到寫入時,使用目前有效身分、設備範圍與操作權限做判定。前端傳來role=Engineer或舊權限版本12只是資訊,不能作為授權依據。若權限查詢失敗,對新的受限寫入採拒絕並回明確原因,不猜測仍是原角色。
權限更新通知可加快畫面反應,但不能取代執行端檢查。通知可能遺失、畫面可能離線,或舊分頁暫停更新;即使使用者還看到可按的按鈕,送出的請求也應在可信任端被拒絕。
錯誤訊息要讓操作員理解下一步,例如「目前僅有讀取權限,設定尚未提交」。不要只顯示連線失敗,否則現場可能反覆重試、重開機,卻無法解決真正的授權問題。
處理舊工作階段 權限快取與延後執行
若服務使用權限快取,先定義更新與失效機制。只依快取五分鐘到期,可能讓被降權者在這段時間仍可寫入;若需求是變更後立即拒絕,必須有權威端即時檢查、版本核對或主動失效等設計,而不是把五分鐘稱為立即。
工作階段或簽章權杖仍有效,不等於其中的舊角色可以一直使用。系統若只驗證權杖簽章與期限,卻不查角色是否撤銷,就可能保留舊權限到到期。採用哪種撤銷或短效機制,應依實際身分平台核對,本文不發明通用登出API。
對排隊中的命令,明訂受理與執行前的授權政策。案例OP20在09:59排入佇列、10:01才準備執行;若規格要求執行前仍需有寫入權限,就再次檢查版本13並取消尚未執行的OP20,記錄AuthorizationRevoked。
如果命令已在10:00前合法送往PLC,後來降權通常不能撤回實體效果。應繼續追蹤結果並依資料權限顯示,而不是把狀態改成未執行。若設備支援取消,也必須依其正式取消協定確認,不能只在畫面刪除項目。
權限檢查和命令受理之間也有競態。規格應定義一個可稽核的受理邊界,將權限判定版本與受理紀錄關聯;若變更正好同時發生,要能說明這筆依哪個有效版本被接受,而非靠兩個未同步的時間戳猜測。
把降權與恢復權限各自驗收
準備兩個已登入畫面及一個測試API入口。先確認版本12可按規格讀寫,再將甲降為版本13唯讀。兩個畫面應更新限制,API寫入也應被拒絕;繼續讀取設備A是否允許,則依矩陣單獨驗收。
接著故意讓第二個畫面收不到通知,保留舊按鈕外觀後送出測試寫入。預期執行端拒絕,設備寫入次數不增加,畫面收到拒絕後更新權限提示。這個案例能驗證限制不是僅靠前端隱藏按鈕。
再測延後佇列、批次請求和設備範圍。批次中包含允許與不允許的項目時,依契約整批拒絕或逐項回結果,不能默默部分寫入卻回整批成功。設備A有權限、設備B沒有時,變更目的設備不可繞過檢查。
恢復版本14的修改權限後,重新取得當前設備值、設定版本與單位,再允許建立新提交。不能把降權期間累積的草稿與佇列自動補送;權限恢復不等於使用者仍要執行舊的操作意圖。
失敗時先查請求當下的有效使用者、設備、動作、權限版本與受理結果,再查快取和通知。若僅有按鈕變灰的截圖,無法證明API受保護;驗收需包含執行端拒絕紀錄及設備未新增寫入的證據。
完成後應交出的紀錄與常見問題
完成紀錄至少列權限變更者、被變更者、前後角色、範圍、權限版本、生效時間、各入口測試與未完成命令處置。畫面上能清楚區分「目前唯讀」「草稿未提交」和「先前命令結果待確認」,即可減少操作員誤判。
問:把按鈕藏起來就完成降權嗎?答:沒有,快捷鍵、API與舊分頁仍可能送出;可信任的執行端必須檢查每次受限請求。
問:舊token尚未到期,可以繼續用舊角色嗎?答:要依撤銷政策重新核對目前權限;僅驗證簽章不能證明角色仍有效。
問:降權後可以說所有舊命令已取消嗎?答:不能,尚未送出的可以依政策取消,已受理或送往設備的要查明結果與取消能力。
問:恢復工程師角色後要自動重送草稿嗎?答:不應自動重送;先讀取目前設定與版本,再由使用者決定新的提交。
本文是授權與介面狀態的教學設計。一般操作權限不取代機台安全互鎖;實際機台的安全功能仍需依其工程設計獨立驗證。
參考:OWASP Authorization:預設拒絕與每次請求驗證授權;本文以HMI情境設計操作流程。
參考:OWASP Session Management:工作階段生命週期及權限變更背景。