iT邦幫忙

2026 iThome 鐵人賽

DAY 29
0
Modern Web

Lovable:地球上最強的 AI 生成全端網站 Agentic 開發實戰系列 第 29 篇

第 29 章:簽核正式上線——Google Workspace、通知與營運治理

  • 分享至 

  • xImage
  •  

本章目標

第 28 章完成站內採購簽核,本章把它變成公司能持續營運的系統:

  • 使用 Google 登入並限制核准過的公司成員。
  • 透過 Email 或 LINE 發送待辦與逾時提醒。
  • 支援有期限的代理人。
  • 視需求將正式文件送入 Google Drive Approvals。
  • 處理離職停權、外部 API 失敗與營運報表。

站內資料庫仍是採購狀態的唯一真相來源。Google Drive Approvals 是文件核准的選配能力,不應和站內狀態互相無限制覆寫。

為什麼這一章重要

功能正常不等於能交給公司。正式上線後會遇到主管休假、員工離職、通知信被退回、OAuth 權限被撤銷、Google API 暫時失敗,以及同一份文件在兩個系統出現不同狀態。

本章的成功標準是:外部服務失敗時,核心簽核仍可使用;停權能立即生效;代理有明確起訖;每一項人工處理都有紀錄。

思考模型:身分、工作流與外部文件分層

三層責任:

  1. Google 登入證明使用者控制某個 Google 帳號。
  2. 本地 membership 決定他是否仍是公司成員、屬於哪個部門、能做什麼。
  3. Google Drive Approvals 處理特定文件的外部審閱,不取代本地採購狀態。

只檢查 Email 網域不夠。離職員工的公司帳號可能尚未停用,外包人員也可能有同網域帳號;登入後仍需本地 allowlist 或同步過的 membership。

開始之前

完成第 28 章,準備 Google OAuth 設定與測試 Workspace 帳號。Drive Approvals 的 API、帳號方案與檔案 capability 必須依最新版官方文件確認;若不可用,保留站內簽核與 Email 通知即可。

請規劃採購系統正式上線,不要先實作。
加入 Google 登入、公司 membership allowlist、立即停權、Email 或 LINE 待辦、逾時提醒、有期限代理人與營運報表。
Google Drive Approvals 只作為特定文件的選配核准,本地資料庫仍是採購狀態唯一真相來源。
外部 API 失敗不得回滾站內決策;所有同步要可重試、冪等並提供人工待辦。
請列出 OAuth 權限、資料模型、同步邊界、失敗情境、監控與驗收計畫。

步驟 1:使用 Google 登入加本地 membership

Google callback 完成後,後端驗證 token 的 issuer、audience、有效期與 Email 驗證狀態,再查本地 membership。只有 active 且在有效期間內的成員可進入系統。

不要讓第一次使用公司網域登入的人自動成為一般員工,更不能自動成為管理者。邀請或同步程序建立 membership,管理者確認部門與角色。

步驟 2:建立立即停權流程

管理者將 membership 改為 suspended 或 ended 後,後端每次敏感操作都重新檢查,不只依賴登入時寫入的前端狀態。高風險系統可縮短 session 或在停權時撤銷現有 session。

停權不刪除使用者與事件。待處理簽核要重新指派,並記錄原核准者、代理人與原因。

請實作 Google 登入後的 membership gate。
後端驗證 Google token,再檢查本地 membership 的狀態、有效期、部門與角色。
同網域新帳號不可自動取得存取。membership 停權後,所有敏感 API 立即拒絕,既有事件與姓名快照保留。
請測試停權前已開啟頁面仍嘗試核准的情境。

停權 membership 立即拒絕既有頁面的操作

圖 29-1:Bob 即使仍開著舊頁,下一次核准請求仍被伺服器拒絕,待辦則重派給代理人。

步驟 3:建立通知 outbox

新增 notification_deliveries 或 outbox,保存 request、approval step、收件人、通道、範本、預定時間、狀態與嘗試次數。簽核交易只建立 outbox,不同步等待 Email 或 LINE。

通知內容包含申請編號、用途、金額、目前動作與站內連結。附件不直接附在 Email 或 LINE,收件人登入後再依權限取得短效 URL。

逾時提醒依政策設定,例如 24 小時後提醒、48 小時後升級到代理人或管理待辦。通知成功與否不改變 approval step。

有期限代理與通知 outbox

圖 29-2:代理人具有明確起訖與原因;Email timeout 進入 retrying,dedupe key 防止重複寄送。

步驟 4:支援有期限代理人

新增 delegations:委託人、代理人、適用角色或部門、開始/結束、原因、建立者。代理人在有效期間可處理新待辦,但事件同時記錄實際操作者與被代理者。

禁止代理給自己、停權帳號或會造成自我核准的人。代理到期後立即失效,尚未處理工作回到原核准者或管理待辦。

請新增有期限的 approval delegation。
代理設定包含委託人、代理人、範圍、開始與結束時間,使用 Asia/Taipei 顯示。
後端必須拒絕停權代理人、自我代理,以及代理後造成申請人核自己申請的情況。
決策事件同時記錄 actor 和 delegated_for。到期後不再授權,既有歷史保留。

步驟 5:選配 Google Drive Approvals

只有需要正式文件共同核准時才加入,例如合約或報價比較表。流程:

  1. 授權使用者將指定檔案連結到 request revision。
  2. 後端檢查檔案 capability 與最小 OAuth scope。
  3. 建立 Drive approval,保存 file ID、approval ID、外部狀態與最後同步時間。
  4. webhook 或排程查詢外部狀態,轉成「文件核准證據」,不直接覆寫整張採購單。

本地表 external_approvals 保存 provider、revision、外部 IDs、status、sync cursor/時間與錯誤。所有同步冪等。

Google Drive 文件在核准期間若內容變更,外部核准可能重設;系統應提示重新檢查,不沿用舊證據。若 API 或方案不可用,回退到站內附件與核准,不阻塞核心流程。

步驟 6:定義雙系統衝突規則

本案例規則:

  • 站內 approval step 是採購是否通過的唯一狀態。
  • Drive approval 是某個 revision 文件的額外證據。
  • Drive 拒絕時建立站內待辦,授權人決定退回或拒絕,不由同步程式直接改整張申請。
  • 外部狀態逾時或無法讀取,不撤銷已完成的站內決策。
  • 新 revision 必須建立新的文件核准關聯。

這些規則應顯示在 UI,避免使用者誤以為兩套系統永遠即時一致。

站內簽核與 Drive 文件證據的同步邊界

圖 29-3:Drive timeout 或文件修改只影響外部證據;站內 approval step 仍是唯一真相。

步驟 7:建立治理與營運報表

管理者需要:

  • 待簽平均時間與逾時件數。
  • 各部門申請金額與拒絕/退回比例。
  • 通知永久失敗與外部同步錯誤。
  • 即將到期的代理與 membership。
  • 最近角色、政策與整合設定變更。

報表使用聚合資料,不預設顯示完整附件或不必要個資。系統 activity log 與 Lovable/Workspace 平台 audit log 各有用途,不能互相取代。

採購治理問題佇列與 audit 摘要

圖 29-4:逾期待辦、代理、通知失敗、停權未重派與證據過期分別進入治理佇列,人工處理需留下原因。

步驟 8:驗收正式營運情境

測試:

  1. 非 allowlist 的同網域帳號登入後仍被拒絕。
  2. 停權使用者在已開啟頁面核准時,後端拒絕。
  3. 通知 API timeout 不影響簽核,且重試不重複寄送。
  4. 代理在起訖期間有效,到期立即失效。
  5. 代理不會造成自我核准。
  6. Drive API 不可用時核心站內簽核仍可完成。
  7. 同一外部狀態重送只建立一次事件。
  8. 文件內容變更後不沿用舊 approval 證據。
  9. 新 revision 不會錯接舊文件核准。
  10. 匯出報表不含附件 URL 或不必要個資。
請執行採購系統正式上線故障演練。
測試同網域未授權帳號、停權後舊頁面操作、通知 timeout 與重送、代理起訖和自我核准、Drive API outage、外部事件重送、文件修改與新 revision。
證明本地簽核是唯一真相來源,外部整合失敗不會破壞既有決策。
逐項提供權限、事件、outbox、external approval 與畫面證據。

實作練習

建立一筆需要主管、財務與文件核准的 80,000 元採購。設定主管明天休假並委託代理人,模擬 Email timeout、Drive API timeout 與文件修改。接著在原主管已開啟待辦頁時停權帳號。

預期成果是代理在有效期間能核准且事件清楚,通知與 Drive 失敗各自進入待辦,停權帳號的舊頁面無法完成操作,站內 revision 與決策沒有被外部狀態覆寫。

常見錯誤

  • 只檢查 Email 網域: 本地 membership 才是公司授權來源。
  • 停權只隱藏選單: 後端每次敏感操作都要重新驗證。
  • 通知放在核准交易裡: 外部 timeout 會拖垮核心流程,應使用 outbox。
  • 代理沒有期限: 會留下永久隱性權限。
  • Google 狀態直接覆寫站內狀態: 兩套生命週期不同,需明確衝突規則。
  • 要求過大的 OAuth scope: 只取得完成任務所需最小權限。

上線前檢查清單

  • [ ] Google token 與本地 membership 都經後端驗證。
  • [ ] 同網域帳號不會自動取得權限。
  • [ ] 停權對既有 session 的策略已測試。
  • [ ] 通知使用 outbox、冪等重試與永久失敗待辦。
  • [ ] 附件不直接放進外部訊息。
  • [ ] 代理有範圍、期限與自我核准防護。
  • [ ] Drive Approvals 是選配證據,不取代站內狀態。
  • [ ] 外部同步可重試且有人工修復方式。
  • [ ] OAuth scopes 採最小權限。
  • [ ] 報表、事件與平台 audit log 的責任已分清楚。

延伸閱讀

名詞解釋與延伸提問

  • Allowlist:明確列出可取得系統存取權的成員名單。
  • Outbox pattern:核心交易先寫入待送工作,再由獨立程序呼叫外部服務。
  • Delegation(代理):在限定期間與範圍內,讓另一人代為處理工作。
  • Source of truth:某類狀態唯一具權威的資料來源。
  • OAuth scope:應用程式要求使用者授予的特定外部服務權限。

你可以接著問 Lovable:「請依我的 Workspace、代理政策與通知 SLA,產生正式上線 runbook 和離職停權演練。」下一章將用全書的 Agentic 檢查清單,重新審查這四個台灣案例是否真的達到可交付標準。


嗨!我是 Wolke,曾任 Google Developer Expert(GDE,2019–2023) 與 LINE API Expert。我熱衷於研究 AI Agent、n8n 自動化工作流及全端開發架構,致力於將 AI 技術轉化為實際的生產力工具。

如果你喜歡這篇文章,歡迎透過以下方式與我交流,獲取更多技術實戰內容:

📚 技術著作:《實用的 Gemini API 開發點子書》,帶你運用 Gemini App、Google AI Studio、Gemini CLI 與 Antigravity IDE,打造 AI Agent 與實用產品。

📝 技術部落格:歡迎追蹤我的 Medium,我會持續分享 Agentic Automation、架構設計與實際開發的踩坑心得。

🎤 技術講座:我持續受邀至技術社群及研討會,分享 AI Agent、自動化工作流、DevOps 與全端開發實戰。曾於 2026 年 6 月 26 日的 DevOpsDays Taipei 2026 主講「不再只是寫腳本!讓 AI 代理人成為你的 SRE 最佳夥伴」工作坊。

如果你的企業、社群或學校正在尋找相關主題講者,歡迎私訊與我聯繫、洽談講座合作!

🎁 免費送 Lovable 額度給讀者!

我每個月會開放 10 個名額,每人 50 點 Lovable 額度,讓大家實際動手打造自己的網站或 App。

參加方式:

  1. 訂閱本系列文章
  2. 分享任一篇系列文章
  3. 私訊分享截圖及你的 Lovable 帳號 Email

確認後,我會邀請你加入 Lovable workspace 並設定 50 點額度。名額有限,送完為止!


上一篇
第 28 章:採購申請系統——角色、簽核狀態與稽核軌跡
系列文
Lovable:地球上最強的 AI 生成全端網站 Agentic 開發實戰 共 29 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言