spec / auth / 階段 B

多租戶帳號、訂閱與租戶切換(Auth)

VOPS 平台的使用者身分、租戶訂閱、進入租戶與切換租戶:單一平台帳號訂閱多個租戶並在其間切換,租戶方自行審核訂閱者與維護角色,所有移除一律先封存再刪除。(Draft v8;本文件只描述需求,不涉及技術實作、介面設計與測試)

功能需求與驗收標準 1:1 對齊
83
業務規則每條配違反後果
63
狀態轉移7 個狀態
10
未解除的風險已接受、風險自負
0

最後更新 2026-08-29 · 決策演進

01

目標與 Non-goals

要做什麼與明確不做什麼,左右對照。

目標

  1. 使用者以單一平台帳號訂閱多個租戶並在其間切換,租戶方自行審核訂閱者與維護角色,所有移除一律先封存再刪除。

Non-goals

  1. 付費、方案、席次上限:另立計費規格

  2. 各模組的細部功能權限:角色管理只做角色的增刪改(見 FR-75~FR-77);某個角色能做什麼,由各模組於自己的規格中決定,不在本規格範圍

  3. 解除封存:本版不做,畫面上不提供入口

  4. 刪除的資料保留期與延遲清除:本版刪除即時生效、立刻清除,不做保留期或垃圾桶機制

  5. 信箱驗證:本版不做,註冊完成後帳號即刻可用

  6. 忘記密碼(登入前的密碼重設):本版不做;密碼只能在登入後的 profile 頁面自行變更

  7. 審核結果的通知管道(Email、站內信):不做,系統一律不通知,使用者也不會知道審核結果

  8. 租戶目錄、租戶搜尋、公開加入:本版不做,一律憑租戶代碼申請

  9. 變更 Email:Email 為永久身分識別,任何版本都不支援變更

  10. 操作稽核紀錄:本版不做,不留存也不提供檢視畫面

  11. 第三方登入(Google、SSO 等):本系統目前只支援 Email + 密碼

  12. 租戶業務資料的繼承與移轉:本版不做;auth 只涵蓋帳號、租戶、訂閱者關係與角色,不含業務資料(訂單、專案等)。未來有業務資料後另立規格,屆時須反向限制 FR-64、FR-65:刪除租戶前應先完成業務資料移轉,繼承對象限有效租戶。已裁示(D-6,2026-08-29):接受此死結,平台最後一個租戶不得刪除;該規格依此設計,不再視為待解問題。

02

名詞定義

規格用語的唯一定義,後續條文皆以此為準。

使用者(User)
註冊於 VOPS 平台的個人帳號,是平台的最上層主體,不隸屬任何租戶
租戶(Tenant)
一個獨立的資料與操作邊界,擁有自己的後台 Dashboard
租戶代碼(Tenant Code)
租戶的唯一識別代碼,由租戶方私下告知欲加入者;申請加入租戶的唯一入口
訂閱關係(Subscription)
使用者與租戶之間的關聯,帶有狀態與角色;一位使用者對同一租戶至多一筆
訂閱者(Subscriber)
與某租戶有訂閱關係的使用者本人。訂閱者是人,訂閱關係是該人與該租戶之間的那筆關聯;狀態與角色附在訂閱關係上,不附在訂閱者身上
Superadmin
VOPS 平台方人員,帳號由平台方於系統建置時建立,不開放註冊
ADMIN
租戶管理員
USER
租戶一般訂閱者
封存
將對象收起,預設不出現於任何畫面與查詢結果,但記錄完整保留於系統中;管理者可主動開啟篩選器檢視,以便執行刪除
刪除
將記錄永久清除、不可復原。只能對「已封存」的對象執行
停用
暫時封鎖某個租戶或平台帳號的使用權,與封存不同,停用是可逆的常態管理動作
封存篩選器
管理端清單上的開關,開啟後清單才會併同列出已封存的資料;預設關閉
系統設定
租戶層的管理區,集中放置該租戶的各項管理功能;本規格涵蓋其中的訂閱者管理與角色管理
系統預設角色
系統內建、每個租戶必定存在的角色,即 ADMIN 與 USER;不可編輯、不可刪除
自訂角色
由租戶自行建立與維護的角色,只在該租戶內有效
03

角色與權責

可做的在左、不可做的在右;右欄是承諾邊界。

Superadmin(平台層級)

建立平台使用者帳號、建立/停用/啟用/封存/刪除租戶、指派租戶首位 ADMIN、指派租戶訂閱者角色、停用/啟用/封存/刪除平台帳號(自己的平台帳號除外,見 FR-68)、必要時代行租戶管理

  • 建立平台使用者帳號
  • 建立/停用/啟用/封存/刪除租戶
  • 指派租戶首位 ADMIN
  • 指派租戶訂閱者角色
  • 停用/啟用/封存/刪除平台帳號
  • 必要時代行租戶管理
  • 對自己的平台帳號執行刪除、停用或封存(見 FR-68)

ADMIN(租戶層級)

審核該租戶的訂閱申請、變更該租戶任一訂閱者(含其他 ADMIN 與自己)的角色組合、停權/啟用/封存/刪除該租戶任一訂閱者(含其他 ADMIN 與自己)、搜尋該租戶訂閱者、操作 Dashboard;唯受「租戶不得沒有 ADMIN」與「訂閱者至少保有一個角色」兩項保護限制

  • 審核該租戶的訂閱申請
  • 變更該租戶任一訂閱者(含其他 ADMIN 與自己)的角色組合
  • 停權/啟用/封存/刪除該租戶任一訂閱者(含其他 ADMIN 與自己)
  • 搜尋該租戶訂閱者
  • 操作 Dashboard
  • 使租戶沒有 ADMIN(「租戶不得沒有 ADMIN」)
  • 使訂閱者沒有任何角色(「訂閱者至少保有一個角色」)

USER(租戶層級)

操作該租戶 Dashboard

  • 操作該租戶 Dashboard
    04

    使用者旅程

    32 步。誰做了什麼,系統如何回應。

    1. 1

      訪客進入 VOPS 平台

    2. 2

      系統判斷:是否已有平台帳號?

      已有帳號 → 管道①輸入 Email 與密碼;尚無帳號 → 管道②填寫註冊表單

    3. 3

      訪客管道②:填寫註冊表單,姓名/Email/密碼/租戶代碼

      進入「租戶代碼有效且可申請?」檢查

    4. 4

      系統判斷:租戶代碼有效且可申請?

      有效 → 檢查該 Email 是否已註冊;無效 → 告知「租戶代碼無效」

    5. 5

      系統告知「租戶代碼無效」,不透露租戶是否存在

      回到註冊表單

    6. 6

      系統判斷:該 Email 是否已註冊?

      未註冊過 → 建立平台帳號;已註冊過 → 告知此 Email 已註冊

    7. 7

      系統告知此 Email 已註冊,引導改用登入

      前往管道①登入

    8. 8

      系統建立平台帳號(即刻可用),並同時送出該租戶訂閱申請

      註冊完成,可直接登入 → 管道①

    9. 9

      使用者管道①:輸入 Email 與密碼

      進入「帳密是否正確?」檢查

    10. 10

      系統判斷:帳密是否正確?

      正確 → 檢查平台帳號是否可用;錯誤 → 登入失敗並累計次數

    11. 11

      系統登入失敗並累計次數,達上限暫時鎖定帳號

      回到管道①輸入 Email 與密碼

    12. 12

      系統判斷:平台帳號是否可用?未停用且未封存

      可用 → 登入成功;已停用或已封存 → 拒絕登入

    13. 13

      系統拒絕登入,並告知帳號已停用

    14. 14

      系統登入成功,平台使用者身分

      進入「是否要申請加入其他租戶?」

    15. 15

      系統判斷:是否要申請加入其他租戶?

      是 → 管道③輸入租戶代碼;否 → 進入租戶資格檢查(見第 7 節)

    16. 16

      使用者管道③:輸入租戶代碼

      進入「租戶代碼有效且可申請?」檢查

    17. 17

      系統判斷:租戶代碼有效且可申請?

      有效 → 送出訂閱申請;無效 → 告知「租戶代碼無效」

    18. 18

      系統告知「租戶代碼無效」

      回到管道③輸入租戶代碼

    19. 19

      系統送出訂閱申請,狀態為待審核

      回到登入成功的平台使用者身分

    20. 20

      系統進入租戶資格檢查(見第 7 節)

    21. 21

      使用者登入成功,平台使用者身分;Superadmin 亦走同一條旅程,不另設專用落點

      進入「有可進入的租戶?」

    22. 22

      系統判斷:有可進入的租戶?

      有 → 判斷可進入的租戶數量;無 → 顯示「尚未加入任何租戶」

    23. 23

      系統顯示「尚未加入任何租戶」,引導提出訂閱申請;Superadmin 沒有租戶時同樣停在此引導狀態,側欄「Super Admin」群組仍可使用

      前往管道③申請加入租戶

    24. 24

      使用者管道③:申請加入租戶

    25. 25

      系統判斷:可進入的租戶數量

      只有一個 → 選定要進入的租戶;多個 → 顯示「我的租戶」頁

    26. 26

      系統顯示「我的租戶」頁

      使用者選定要進入的租戶

    27. 27

      使用者選定要進入的租戶

      進入資格檢查(見第 7 節)

    28. 28

      系統進入資格檢查(見第 7 節)

      通過 → 進入該租戶 Dashboard;不通過 → 拒絕進入並告知原因

    29. 29

      系統進入該租戶 Dashboard

      可由平台層側欄「我的租戶」快速切換到另一個租戶,或走管道③申請加入租戶

    30. 30

      系統拒絕進入,並告知原因

      回到「我的租戶」頁

    31. 31

      使用者切換到另一個租戶

      回到「我的租戶」頁

    32. 32

      Superadmin登入後於平台層側欄看到「Super Admin」群組

      可進入「租戶管理」(全平台租戶)或「使用者管理」(全平台使用者);此群組不影響步驟 21~31 的落點

    05

    功能需求與驗收標準

    本頁主角。83 條,每條與同編號的驗收標準左右並排——需求說「要什麼」,驗收說「怎麼算做到」。

    FR-01

    註冊平台帳號

    需求

    訪客以姓名、Email、密碼與租戶代碼註冊平台帳號;一個 Email 只能對應一個平台帳號

    驗收

    註冊畫面要求姓名、Email、密碼與租戶代碼,四者齊備且有效時帳號建立成功;同一 Email 不論註冊幾次,平台上都只存在一個帳號。

    FR-02

    租戶代碼無效即拒絕

    需求

    註冊時的租戶代碼無效時當場拒絕,不建立任何帳號

    驗收

    註冊時填入無效租戶代碼,畫面顯示「租戶代碼無效」,註冊未完成,該 Email 之後仍可重新註冊。

    FR-03

    Email 已存在引導登入

    需求

    註冊的 Email 已存在時不建立新帳號,一律引導改走登入;已註冊者要加入更多租戶只能走管道③

    驗收

    註冊時填入已註冊過的 Email,畫面告知該 Email 已註冊並引導改用登入,不產生第二個帳號;要加入更多租戶只能在登入後輸入租戶代碼。

    FR-04

    註冊同時產生訂閱申請

    需求

    註冊成功時同時對該租戶產生一筆「待審核」的訂閱申請

    驗收

    註冊成功後,該租戶的待審申請清單出現這筆申請,使用者端該租戶顯示「審核中」。

    FR-05

    註冊後帳號即刻可用

    需求

    註冊成功後帳號即刻可用,使用者可直接登入,不需信箱驗證或任何額外開通步驟

    驗收

    註冊完成後立刻以同一組 Email 與密碼登入即成功,過程中不出現信箱驗證或任何開通步驟的畫面。

    FR-06

    登入為平台使用者身分

    需求

    使用者以 Email 與密碼登入,登入的身分是「平台使用者」,尚未進入任何租戶

    驗收

    以 Email 與密碼登入成功後,畫面停在平台使用者身分的頁面,尚未進入任何租戶 Dashboard。

    FR-07

    檢視個人資料與訂閱狀態

    需求

    使用者可檢視自己的姓名、Email 與所有租戶訂閱的呈現狀態(審核中/已加入)

    驗收

    個人 profile 頁顯示自己的姓名、Email,以及每一筆租戶訂閱的呈現狀態,狀態只會是「審核中」或「已加入」。

    FR-08

    無租戶仍可登入

    需求

    使用者沒有任何可進入的租戶時仍可登入平台,畫面須引導其提出訂閱申請

    驗收

    沒有任何可進入租戶的使用者仍可登入,畫面顯示「尚未加入任何租戶」並提供提出訂閱申請的入口。

    FR-09

    登出

    需求

    使用者可登出平台

    驗收

    使用者可執行登出,登出後畫面回到登入頁。

    FR-10

    變更密碼

    需求

    已登入的使用者可在個人 profile 頁面變更自己的密碼,變更前須先驗證舊密碼

    驗收

    profile 頁可變更密碼且要求先輸入舊密碼;舊密碼錯誤時畫面顯示錯誤且密碼未變更。

    FR-11

    變更密碼後其他登入失效

    需求

    密碼變更完成後,該使用者其他既有的登入狀態一律失效,須以新密碼重新登入

    驗收

    密碼變更完成後,同一使用者其他既有登入狀態的下一個操作被導回登入畫面,且只有新密碼能登入成功。

    FR-12

    變更姓名

    需求

    已登入的使用者可在個人 profile 頁面變更自己的姓名

    驗收

    profile 頁可變更自己的姓名,儲存後畫面顯示新姓名。

    FR-13

    Email 不可變更

    需求

    Email 為永久身分識別,任何情況下都不可變更

    驗收

    profile 頁與管理端皆不提供變更 Email 的入口,Email 僅供檢視。

    FR-20

    憑租戶代碼申請

    需求

    使用者須輸入正確的租戶代碼才能提出訂閱申請;系統不提供租戶清單或搜尋功能

    驗收

    提出訂閱申請的畫面要求輸入租戶代碼,且不提供任何租戶清單或租戶搜尋入口。

    FR-21

    管道③申請其他租戶

    需求

    已登入的使用者可對其他租戶輸入代碼提出申請(管道③),不需要也不能重新註冊

    驗收

    已登入的使用者輸入另一個租戶代碼即可送出申請,畫面不要求、也不提供重新註冊的入口。

    FR-22

    申請進入待審清單

    需求

    申請送出後狀態為「待審核」,並進入該租戶的待審清單

    驗收

    申請送出後使用者端顯示「審核中」,同時該租戶的待審申請清單出現這筆申請。

    FR-23

    重複申請不揭露現況

    需求

    對同一租戶已有「待審核」或「已生效」關係時不重複建立申請,且回應與成功送出一致,不揭露現況

    驗收

    對已有「待審核」或「已生效」關係的租戶再次送出申請,畫面回應與成功送出時完全一致,且不新增第二筆關係。

    FR-24

    已拒絕/已封存可重新申請

    需求

    關係為「已拒絕」或「已封存」時,使用者可不限次數重新提出申請,狀態回到「待審核」

    驗收

    關係為「已拒絕」或「已封存」時,使用者可不限次數再次送出申請,送出後使用者端顯示「審核中」。

    FR-25

    使用者端只見審核中/已加入

    需求

    使用者端一律只看得到「審核中」與「已加入」,看不到拒絕、停權等內部狀態,也看不到任何原因

    驗收

    使用者端任何畫面只出現「審核中」與「已加入」,不出現拒絕、停權等內部狀態,也不出現任何原因說明。

    FR-26

    主動退出租戶

    需求

    使用者可主動退出已加入的租戶,該關係轉為「已封存」

    驗收

    使用者可對已加入的租戶執行退出,退出後該租戶不再出現在可進入的租戶中。

    FR-27

    多租戶訂閱不設上限

    需求

    使用者可同時擁有多個租戶的訂閱關係,數量不設上限

    驗收

    使用者加入多個租戶後,「我的租戶」頁全數列出,不因租戶數量而被擋下。

    FR-30

    檢視待審清單

    需求

    租戶 ADMIN 可檢視該租戶的待審申請清單

    驗收

    租戶 ADMIN 可開啟該租戶的待審申請清單並看到其中全部待審申請。

    FR-31

    核准申請

    需求

    租戶 ADMIN 可核准申請,核准後該訂閱者的預設角色為 USER

    驗收

    ADMIN 核准申請後,該人出現在訂閱者清單且角色顯示為 USER,使用者端該租戶顯示「已加入」。

    FR-32

    拒絕申請不需原因

    需求

    租戶 ADMIN 可拒絕申請;不需填寫任何原因,因為結果不會通知申請者

    驗收

    ADMIN 拒絕申請時畫面不要求填寫原因;拒絕後使用者端該租戶仍顯示「審核中」。

    FR-33

    停權、啟用、封存訂閱者

    需求

    租戶 ADMIN 可停權、啟用、封存該租戶任一訂閱者,含其他 ADMIN 與自己;皆不需填寫原因;唯受 FR-58 限制

    驗收

    ADMIN 對本租戶任一訂閱者(含其他 ADMIN 與自己)都看得到停權、啟用、封存入口且不要求填寫原因;操作會使該租戶沒有「具 ADMIN 角色且已生效」的訂閱者時被阻擋。

    FR-34

    變更訂閱者角色組合

    需求

    租戶 ADMIN 可變更該租戶任一訂閱者(含其他 ADMIN 與自己)的角色組合,包含把一般訂閱者升為 ADMIN、移除其他 ADMIN 的 ADMIN 角色、移除自己的 ADMIN 角色;唯受 FR-54 與 FR-58 限制

    驗收

    ADMIN 可調整本租戶任一訂閱者(含其他 ADMIN 與自己)的角色組合,含加上與移除 ADMIN;清空角色、或使該租戶沒有「具 ADMIN 角色且已生效」的訂閱者時被阻擋。

    FR-35

    ADMIN 之間彼此平等

    需求

    租戶 ADMIN 之間彼此平等,無高低之分:ADMIN 對其他 ADMIN 與對自己的管理權限,與對一般訂閱者完全相同(本條原本「不可停權、啟用或封存其他 ADMIN 與自己」的限制已廢除,保留編號供追溯)

    驗收

    ADMIN 對其他 ADMIN 與對自己的管理入口,與對一般訂閱者完全相同,畫面不因對象是 ADMIN 而少任何操作。

    FR-36

    不得跨租戶操作

    需求

    租戶 ADMIN 只能審核與管理自己所屬租戶,不得跨租戶操作

    驗收

    ADMIN 的待審清單與訂閱者清單只出現自己所屬租戶的資料,畫面上沒有操作其他租戶的入口。

    FR-37

    結果不主動通知

    需求

    審核與訂閱者管理的任何結果都不主動通知當事人

    驗收

    ⚠️ 黑箱,無畫面出口可驗(「不主動通知」為系統不發出通知,當事人端無任何可觀測結果;使用者端呈現由 FR-25 承接)。

    FR-38

    已封存訂閱者預設不出現

    需求

    已封存的訂閱者預設不出現在租戶訂閱者清單、搜尋與統計中;其中清單與統計可由封存篩選器改為併同列出(見 FR-39),搜尋則一律不含已封存訂閱者(見 FR-70)

    驗收

    封存篩選器關閉時,訂閱者清單、搜尋與統計皆不出現已封存訂閱者;開啟後清單與統計併同列出,搜尋仍搜不到。

    FR-39

    封存篩選器與刪除

    需求

    租戶 ADMIN 可開啟封存篩選器檢視該租戶已封存的訂閱者,並對其執行刪除;刪除後該訂閱關係永久清除。封存篩選器只擴大清單的列出範圍,不擴大搜尋的比對範圍(見 FR-70)

    驗收

    ADMIN 開啟封存篩選器後清單列出已封存訂閱者並可對其執行刪除;刪除後再開篩選器也不再出現;篩選器開啟不會讓搜尋多命中任何一筆。

    FR-70

    訂閱者搜尋

    需求

    租戶 ADMIN 可以關鍵字搜尋該租戶訂閱者;比對方式為模糊比對,比對範圍含訂閱者的姓名與 Email,輸入任一片段即命中,不需完整輸入;大小寫規則適用第 6 節「搜尋通則(全站適用)」。搜尋與封存的關係一律適用第 6 節「狀態可見性原則」第 7 條的全站通則(搜尋不含已封存記錄,不因封存篩選器開啟而改變),本條不另行重述

    驗收

    ADMIN 以訂閱者姓名或 Email 的任一片段搜尋即命中,不需完整輸入;搜尋結果一律不含已封存訂閱者,且不因封存篩選器開啟而改變。

    FR-40

    進入租戶逐項檢查資格

    需求

    使用者選定租戶進入時,系統須依第 7 節逐項檢查資格

    驗收

    使用者選定租戶要進入時,第 7 節六項條件逐項檢查,任一不符即無法進入。

    FR-41

    資格不符告知原因

    需求

    資格不符時須告知原因,但不得揭露該租戶的內部審核狀態

    驗收

    資格不符時畫面顯示原因,但不出現該租戶的內部審核狀態(已拒絕、已停權等)。

    FR-42

    切換租戶免密碼

    需求

    使用者可在自己所有「已生效」的租戶之間切換,切換時不需重新輸入密碼

    驗收

    使用者可在所有「已生效」的租戶之間切換,切換過程不出現要求輸入密碼的畫面。

    FR-43

    單一租戶直接進入

    需求

    使用者只有一個可進入的租戶時,登入後直接進入該租戶 Dashboard

    驗收

    只有一個可進入租戶的使用者登入後直接落在該租戶 Dashboard。

    FR-44

    多租戶顯示「我的租戶」頁

    需求

    使用者有多個可進入的租戶時,登入後顯示「我的租戶」頁

    驗收

    有多個可進入租戶的使用者登入後落在「我的租戶」頁。

    FR-45

    持續顯示目前租戶

    需求

    進入租戶後,畫面須持續顯示目前所在的租戶,避免使用者誤判

    驗收

    進入租戶後,畫面持續顯示目前所在的租戶。

    FR-46

    切換後完整重新載入

    需求

    切換租戶後,畫面須完整重新載入,所有資料一律換成新租戶的資料;不得沿用或殘留前一個租戶的任何畫面狀態與內容

    驗收

    切換租戶後畫面完整重新載入,所有內容換成新租戶的資料,畫面不殘留前一個租戶的任何狀態與內容。

    FR-47

    租戶資料隔離

    需求

    使用者在某租戶內只能看到該租戶的資料,不得看見或影響其他租戶

    驗收

    使用者在某租戶內看到的資料全屬該租戶,畫面上沒有其他租戶的資料,也沒有影響其他租戶的入口。

    FR-48

    停權/封存立即失去操作權

    需求

    訂閱關係被停權或封存後,使用者須立即失去該租戶的操作權,不得延續到下次登入

    驗收

    訂閱關係被停權或封存後,使用者的下一個操作即被中止,不會延續到下次登入。

    FR-50

    Superadmin 帳號

    需求

    Superadmin 帳號由平台方於系統建置時建立,不開放註冊,可有多位

    驗收

    註冊畫面不提供任何建立 Superadmin 的入口,平台可同時存在多位 Superadmin。(⚠️ 部分黑箱:「於系統建置時建立」無畫面出口可驗)

    FR-51

    建立租戶

    需求

    租戶只能由 Superadmin 建立,一般使用者無法自行開通;建立時須設定不重複的租戶代碼

    驗收

    只有 Superadmin 的管理端有建立租戶的入口;建立時填入重複的租戶代碼會被阻擋。

    FR-52

    指派首位 ADMIN

    需求

    Superadmin 建立租戶時須指派一位首位 ADMIN,該人須為既有平台使用者(可先以 FR-61 建立),其訂閱關係直接生效免審核

    驗收

    建立租戶時須指派一位首位 ADMIN,可選對象為既有平台使用者;建立完成後該人的訂閱關係即為「已生效」,不經審核。

    FR-53

    Superadmin 複選指派角色

    需求

    Superadmin 可對租戶內任一「已生效」訂閱者複選指派角色,一位訂閱者可同時具備多個角色

    驗收

    Superadmin 可對租戶內任一「已生效」訂閱者複選多個角色,儲存後該訂閱者同時顯示多個角色。

    FR-54

    至少保有一個角色

    需求

    每位訂閱者至少須保有一個角色,不得清空;本限制對 Superadmin 與租戶 ADMIN 的角色調整一體適用

    驗收

    移除訂閱者最後一個角色時被阻擋,Superadmin 與租戶 ADMIN 一體適用。

    FR-55

    停用與啟用租戶

    需求

    Superadmin 可停用與啟用租戶;停用後所有訂閱者一律無法進入該租戶

    驗收

    Superadmin 停用租戶後,該租戶所有訂閱者一律無法進入;啟用後恢復可進入。

    FR-56

    停用與啟用平台使用者

    需求

    Superadmin 可停用與啟用平台使用者;停用後該使用者無法登入平台(自己的平台帳號除外,見 FR-68)

    驗收

    Superadmin 停用平台使用者後該使用者無法登入,啟用後恢復;自己的平台帳號沒有停用入口。

    FR-57

    封存租戶與平台使用者

    需求

    Superadmin 可封存租戶與平台使用者,封存後該對象不再出現於任何畫面(自己的平台帳號除外,見 FR-68)

    驗收

    Superadmin 封存租戶或平台使用者後,該對象不再出現於任何畫面;自己的平台帳號沒有封存入口。

    FR-58

    最後一位 ADMIN 保護

    需求

    任何會使某租戶「具 ADMIN 角色且已生效」的訂閱者數量歸零的操作一律阻擋,不論操作者是 Superadmin、其他租戶 ADMIN 或該訂閱者本人;包含移除其 ADMIN 角色(含該 ADMIN 自行移除自己的 ADMIN 角色)、停權、封存該訂閱關係(含該 ADMIN 自行停權或封存自己),以及停用或封存該訂閱者的平台帳號

    驗收

    會使某租戶「具 ADMIN 角色且已生效」訂閱者歸零的操作一律被阻擋,含移除其 ADMIN 角色、停權或封存該訂閱關係、停用或封存其平台帳號,不論操作者是 Superadmin、其他租戶 ADMIN 或本人。

    FR-59

    檢視所有租戶與訂閱者

    需求

    Superadmin 可檢視所有租戶與其訂閱者清單;已封存者預設不列入,開啟封存篩選器後才併同列出;篩選器只影響清單的列出範圍,不影響搜尋(見 FR-71)

    驗收

    Superadmin 可檢視所有租戶與其訂閱者清單;已封存者預設不列入,開啟封存篩選器後才併同列出,搜尋結果不受篩選器影響。

    FR-60

    代行租戶管理

    需求

    租戶陷入無可用 ADMIN 的情況時,Superadmin 可代行該租戶的審核與訂閱者管理,或指派新的 ADMIN

    驗收

    租戶陷入無可用 ADMIN 時,Superadmin 仍可對該租戶執行審核與訂閱者管理,或指派新的 ADMIN。

    FR-61

    直接建立平台使用者

    需求

    Superadmin 可直接建立平台使用者帳號(姓名、Email、初始密碼),不經註冊流程、不需租戶代碼;建立出的帳號即刻可登入,且尚未訂閱任何租戶

    驗收

    Superadmin 建立平台使用者帳號的畫面只要求姓名、Email 與初始密碼,不要求租戶代碼;建立出的帳號可立刻登入,登入後畫面顯示「尚未加入任何租戶」。

    FR-62

    建立帳號規則同註冊

    需求

    Superadmin 建立帳號時的 Email 唯一性與密碼強度規則與註冊完全相同,Email 重複時拒絕建立

    驗收

    Superadmin 建立帳號時填入已存在的 Email 會被拒絕,密碼強度不符的提示與註冊時完全相同。

    FR-63

    刪除已封存平台帳號

    需求

    Superadmin 可刪除已封存的平台帳號;該帳號的所有訂閱關係一併永久清除(自己的平台帳號除外,見 FR-68)

    驗收

    Superadmin 可對已封存的平台帳號執行刪除;刪除後各租戶的訂閱者清單不再有此人;自己的平台帳號沒有刪除入口。

    FR-64

    刪除已封存租戶

    需求

    Superadmin 可刪除已封存的租戶;該租戶的所有訂閱關係一併永久清除,訂閱者的平台帳號不受影響

    驗收

    Superadmin 可對已封存的租戶執行刪除;刪除後該租戶的訂閱關係全數消失,原訂閱者的平台帳號仍可正常登入。

    FR-65

    刪除限已封存對象

    需求

    刪除只能對已封存的對象執行;對未封存的對象一律阻擋並告知須先封存

    驗收

    對未封存的對象執行刪除時被阻擋,畫面告知須先封存。

    FR-66

    刪除後釋放識別

    需求

    刪除後該對象的 Email 或租戶代碼即釋放,可被重新註冊或重新建立,新對象與被刪除者無任何關聯

    驗收

    刪除後以同一 Email 重新註冊、或以同一租戶代碼重新建立租戶皆可成功,新對象不帶任何舊有訂閱關係與角色。

    FR-67

    刪除二次確認

    需求

    刪除須二次確認,且須輸入該對象的識別名稱(租戶名稱或使用者 Email)完全一致才能執行

    驗收

    刪除須經二次確認,且須輸入該對象的租戶名稱或使用者 Email 完全一致才能執行,不一致時無法執行。

    FR-68

    Superadmin 不得操作自己帳號

    需求

    Superadmin 不得對自己的平台帳號執行刪除、停用或封存;管理端不提供對自己帳號的編輯入口,帳號狀態僅供檢視,本人資料一律改由個人 profile 頁自行維護(見 FR-10、FR-12)

    驗收

    管理端不提供對自己帳號的刪除、停用、封存與編輯入口,自己的帳號狀態僅供檢視;本人資料改由個人 profile 頁維護。

    FR-69

    封存篩選器範圍

    需求

    管理端清單提供封存篩選器,預設關閉;使用者端不提供,任何情況下都看不到已封存記錄

    驗收

    管理端清單有封存篩選器且預設關閉;使用者端沒有此開關,任何情況下都看不到已封存記錄。

    FR-71

    平台使用者與租戶搜尋

    需求

    Superadmin 可以關鍵字搜尋平台使用者清單與租戶清單;比對方式為模糊比對,平台使用者比對姓名與 Email、租戶比對租戶名稱與租戶代碼,輸入任一片段即命中,不需完整輸入;大小寫規則適用第 6 節「搜尋通則(全站適用)」。兩者的搜尋與封存的關係一律適用第 6 節「狀態可見性原則」第 7 條的全站通則(搜尋不含已封存記錄,不因封存篩選器開啟而改變)

    驗收

    Superadmin 以姓名或 Email 的任一片段可命中平台使用者,以租戶名稱或租戶代碼的任一片段可命中租戶,皆不需完整輸入;兩者的搜尋結果都不含已封存記錄,且不因封存篩選器開啟而改變。

    FR-72

    同一套系統內頁

    需求

    不分身分與角色,登入後看到的是同一套系統內頁,不存在依角色分版的入口;各模組是否顯示,由該模組自行依角色設定決定

    驗收

    不同身分與角色的使用者登入後看到的是同一套系統內頁,畫面上沒有依角色分版的入口;某模組是否出現,由該模組依角色決定。

    FR-73

    系統設定範圍

    需求

    系統設定為租戶層的管理區,本規格涵蓋其中兩項:訂閱者管理與角色管理

    驗收

    系統設定內可看到訂閱者管理與角色管理兩項。

    FR-74

    訂閱者管理歸屬

    需求

    訂閱者管理即第 9.3 節的審核與訂閱者管理(FR-30~FR-34),歸屬於系統設定之下

    驗收

    第 9.3 節的審核與訂閱者管理入口出現在系統設定之下。

    FR-75

    自訂角色增刪改

    需求

    角色管理提供該租戶自訂角色的新增、更名與刪除;自訂角色只在該租戶內有效

    驗收

    角色管理提供自訂角色的新增、更名與刪除入口;在某租戶建立的自訂角色只出現在該租戶。

    FR-76

    系統預設角色不可編輯刪除

    需求

    ADMIN 與 USER 為系統預設角色,一律呈現於角色管理清單,不可編輯、不可刪除,且每個租戶必定存在

    驗收

    角色管理清單一律列出 ADMIN 與 USER,且這兩者沒有編輯與刪除入口。

    FR-77

    角色管理不設功能權限

    需求

    角色管理不設定任何功能權限;角色能做什麼由各模組自行決定該模組開放給哪些角色

    驗收

    角色管理畫面不提供任何功能權限的設定項目。

    FR-78

    刪除角色須指定接替角色

    需求

    刪除自訂角色時,若仍有訂閱者持有該角色,須於刪除時指定一個接替角色;系統先將全部持有者改派至該接替角色,再刪除原角色。未指定接替角色時一律阻擋刪除

    驗收

    刪除仍有訂閱者持有的自訂角色時,畫面要求指定一個接替角色;指定後全部持有者的角色變為接替角色且原角色從清單消失;未指定接替角色時無法刪除。

    FR-79

    接替角色資格與原子性

    需求

    接替角色須為該租戶現存且非被刪除的角色,系統預設角色與其他自訂角色皆可作為接替角色;改派與刪除視為同一次操作,任一步失敗則整批不生效

    驗收

    接替角色的可選範圍是該租戶其他現存角色(系統預設角色與其他自訂角色皆可),不含被刪除的角色本身;改派與刪除任一步失敗時,畫面顯示角色與其持有者維持原狀。

    FR-80

    平台層側欄結構

    需求

    所有使用者登入後看到同一套平台層側欄,內含「我的租戶」(列出本人訂閱的租戶並可快速切換)與「個人 Profile」兩項;「租戶管理」一詞僅指 Superadmin 的全平台租戶清單,個人訂閱的租戶一律稱「我的租戶」

    ⚠️ 與 FR-72「同一套系統內頁」一致:側欄不依角色分版,差異只在 Superadmin 額外群組(FR-81)。

    驗收

    任一身分的使用者登入後,側欄皆出現「我的租戶」與「個人 Profile」;點「我的租戶」看到本人訂閱的租戶清單並可從中切換;「我的租戶」項目不以「租戶管理」命名。

    FR-81

    Superadmin 群組可見性

    需求

    只有 Superadmin 於側欄額外看到群組「Super Admin」,底下有「租戶管理」(全平台租戶)與「使用者管理」(全平台使用者);非 Superadmin 不顯示此群組

    驗收

    Superadmin 登入後側欄出現「Super Admin」群組,展開後有「租戶管理」與「使用者管理」兩項;租戶 ADMIN 與 USER 登入後側欄不出現「Super Admin」群組。

    FR-82

    Superadmin 登入落點

    需求

    Superadmin 登入後的落點與一般使用者相同,FR-43/FR-44 一體適用;沒有可進入的租戶時顯示「尚未加入任何租戶」引導狀態,此時「Super Admin」群組仍可使用

    驗收

    Superadmin 只有一個可進入租戶時登入後直接落在該租戶 Dashboard;有多個時落在「我的租戶」頁;沒有租戶時畫面顯示「尚未加入任何租戶」引導狀態,且側欄「Super Admin」群組仍可點選進入「租戶管理」與「使用者管理」。

    NFR-01

    密碼不可還原儲存

    需求

    密碼不得以可還原的形式儲存

    驗收

    ⚠️ 黑箱,無畫面出口可驗(密碼的儲存形式不呈現於任何畫面)。

    NFR-02

    登入失敗鎖定

    需求

    連續 5 次登入失敗須鎖定該帳號 15 分鐘,時間到自動解除;Superadmin 可提前解除

    驗收

    連續 5 次登入失敗後畫面顯示帳號鎖定訊息,鎖定期間即使密碼正確也拒絕登入;15 分鐘後不需任何操作即可再次登入,Superadmin 亦可提前解除。

    NFR-03

    租戶資料完全隔離

    需求

    各租戶資料須完全隔離,任何情況下不得跨租戶讀取或寫入

    驗收

    在任一租戶內的所有畫面只出現該租戶的資料,任何操作都不會改動其他租戶的資料。

    NFR-04

    密碼強度

    需求

    密碼須至少 8 碼,且同時包含英文字母與數字

    驗收

    密碼少於 8 碼、或未同時含英文字母與數字時,畫面顯示不符規則且不予儲存。

    NFR-05

    登入狀態有效期限

    需求

    使用者的登入狀態須有有效期限,逾期須重新登入

    驗收

    登入狀態逾期後,使用者的下一個操作被導回登入畫面,須重新登入。

    NFR-06

    權限變更即時拘束

    需求

    權限相關的變更(停權、封存、角色指派、租戶停用、帳號停用)生效後,使用者的下一個操作即受新權限拘束

    驗收

    停權、封存、角色指派、租戶停用、帳號停用生效後,該使用者的下一個操作即受新權限拘束。

    NFR-07

    對外回應不洩漏

    需求

    對外回應不得洩漏租戶是否存在、審核結果或其他租戶的訂閱者身分

    驗收

    畫面訊息不透露租戶是否存在、審核結果或其他租戶的訂閱者身分;租戶代碼不存在與租戶已停用/已封存時的訊息完全一致。

    NFR-08

    封存資料預設不出現

    需求

    封存的資料預設不得出現在任何畫面與查詢結果中,記錄須完整保留於系統中;只有管理者主動開啟封存篩選器時才得以列出

    驗收

    已封存的資料預設不出現在任何畫面與查詢結果;管理者開啟封存篩選器後仍能列出,可見記錄未消失。

    NFR-09

    錯誤訊息一律繁體中文

    需求

    所有呈現給使用者的錯誤訊息一律為繁體中文,不得出現英文錯誤代碼、技術術語或原始系統訊息

    驗收

    所有呈現給使用者的錯誤訊息皆為繁體中文,畫面不出現英文錯誤代碼、技術術語或原始系統訊息。

    NFR-10

    刪除永久清除且限定角色

    需求

    刪除須永久清除該記錄與其連帶資料,不得留下可從畫面還原的殘留;刪除權限只開放給規格指定的角色

    驗收

    刪除後該記錄與其連帶資料不再出現於任何畫面,開啟封存篩選器亦查不到;非規格指定的角色在畫面上沒有刪除入口。

    06

    業務規則

    63 條。規則與「違反時 →」成對讀。

    • 角色附在「訂閱關係」上,不附在使用者身上。同一使用者可在租戶 A 是 ADMIN、在租戶 B 是 USER。

    • 一筆訂閱關係可同時擁有多個角色,角色是可複選的集合,不是單選。

    • 通過審核加入租戶者,預設角色為 USER。

    • Superadmin 與租戶 ADMIN 都能調整訂閱者的角色組合,包含加上或移除 ADMIN;Superadmin 不限租戶,租戶 ADMIN 只限自己所屬租戶。

    • 租戶 ADMIN 對本租戶所有訂閱者(含其他 ADMIN 與自己)的角色有完全權限:可把一般訂閱者升為 ADMIN,可移除其他 ADMIN 的 ADMIN 角色,也可移除自己的 ADMIN 角色;唯不得使任一訂閱者沒有任何角色(見 FR-54),也不得違反規則 7。

    • 租戶 ADMIN 的管理對象是本租戶全體訂閱者,含其他 ADMIN 與自己,皆可停權、啟用、封存;ADMIN 之間彼此平等,無高低之分,唯不得違反規則 7。

    • 每個租戶在任何時刻都必須至少保有一位具 ADMIN 角色且狀態為「已生效」的訂閱者;規則 5、6 的所有操作一律受此限制,任何會使該數量歸零的操作皆阻擋,不論操作者是誰。

    • 角色分兩類:系統預設角色(ADMIN、USER)與自訂角色。系統預設角色每個租戶必定存在,一律呈現於角色管理,且不可編輯、不可刪除。

    • 自訂角色由租戶自行於系統設定的角色管理維護,只在該租戶內有效,不跨租戶共用。

    • 角色管理只負責角色本身的增刪改,不決定任何功能權限。某個角色能做什麼,一律由各模組自行決定該模組要對哪些角色開放。

    • 刪除自訂角色時一律須指定接替角色:仍有訂閱者持有該角色時,須於刪除時指定一個接替角色,系統將全部持有者改派至接替角色後才執行刪除。此規則確保規則 5 的「訂閱者不得沒有任何角色」在刪除角色時同樣成立。

    • 使用者是最上層主體,可同時擁有多個租戶的訂閱關係,並在其間切換。使用者 (1) ──── (N) 訂閱關係 (N) ──── (1) 租戶;訂閱關係帶狀態:待審核 / 已生效 / 已拒絕 / 已停權 / 已封存(單選);角色:ADMIN、USER(可複選,至少一個)。

    • 平台對外只有三個入口,任何身分都必須由其中之一進入:① 登入|對象:已有平台帳號者|以 Email 與密碼登入,登入後為平台使用者身分,尚未進入任何租戶;② 註冊成為使用者|對象:尚無平台帳號者|以姓名、Email、密碼、租戶代碼一次完成「建立平台帳號」與「首次訂閱申請」;③ 註冊其他租戶的使用者|對象:已有平台帳號者|登入後輸入另一個租戶代碼,對該租戶提出訂閱申請

    • 一個 Email 只能對應一個 VOPS 平台帳號,永不重複註冊。

    • 已註冊過的 Email 走管道 ② 時,系統不建立新帳號,一律引導改走管道 ① 登入。

    • 想加入更多租戶一律走管道 ③,不需要、也不能用同一個 Email 再註冊一次。

    • 待審核已提出申請,尚未被審核|能否進入租戶:否|使用者端看到的呈現:審核中

    • 已生效審核通過,正式成為租戶訂閱者|能否進入租戶:是|使用者端看到的呈現:已加入

    • 已拒絕被 ADMIN 拒絕,使用者不會被告知,可再次申請|能否進入租戶:否|使用者端看到的呈現:審核中

    • 已停權曾生效,被暫停,關係保留|能否進入租戶:否|使用者端看到的呈現:審核中

    • 已封存被封存或使用者主動退出,記錄保留但預設不出現於畫面|能否進入租戶:否|使用者端看到的呈現:不顯示

    • 已刪除記錄永久清除,已不存在於系統中|能否進入租戶:否|使用者端看到的呈現:不顯示

    • 使用者端一律只呈現「審核中」與「已加入」兩種結果,看不到已拒絕、已停權等內部狀態。

    • 「已拒絕」「已停權」的區別只在租戶端內部存在,使用者端一律看不到。

    • 已封存的記錄預設不出現在任何畫面上,包含租戶端與平台管理端的清單、搜尋與統計。

    • 管理者(租戶 ADMIN、Superadmin)可主動開啟封存篩選器,讓清單併同列出已封存資料,唯一目的是執行刪除;篩選器預設關閉。篩選器只擴大清單的列出範圍,不改變搜尋的行為(見原則 7)。

    • 使用者端沒有封存篩選器,任何情況下都看不到已封存的記錄。

    • 已刪除的記錄不存在於系統中,任何篩選器都查不到。

    • 搜尋一律不含已封存記錄(全站通則):全站任何搜尋,包含租戶端的訂閱者搜尋、平台管理端的平台使用者搜尋與租戶搜尋,以及日後新增的任何搜尋,一律不比對、也不回傳已封存的記錄,且不因封存篩選器是否開啟而改變。此為預設且唯一的行為,畫面不提供任何可讓搜尋納入已封存記錄的切換入口。

    • 本段規範全站所有搜尋的共通行為,適用租戶端的訂閱者搜尋、平台管理端的平台使用者搜尋與租戶搜尋,以及日後新增的任何搜尋。

    • 模糊比對一律不分大小寫:關鍵字與被比對內容之間的大小寫差異一律忽略;以大寫關鍵字可命中小寫內容,以小寫關鍵字亦可命中大寫內容。全形與半形同樣視為相同:英文字母、數字與符號的全形與半形差異一律忽略;以全形關鍵字可命中半形內容,以半形關鍵字亦可命中全形內容。

    • 搜尋一律不含已封存記錄,見上方「狀態可見性原則」第 7 條。

    • 個別功能需求只定義該項搜尋特有的比對範圍(比對哪些資料),共通行為一律適用本段,不在個別條目重述。

    • 關鍵字前後的空白一律自動去除:使用者輸入的關鍵字,前後的空白在比對前一律先行去除,前後多打空白不影響命中結果。關鍵字中間的空白不在本規則範圍內,本版不特別處理。

    • 繁體與簡體視為不同字,兩者不互通:以繁體關鍵字搜不到只有簡體寫法的內容,以簡體關鍵字也搜不到只有繁體寫法的內容。此為刻意的設計決定,不是遺漏;日後不得逕自當作缺漏補上互通行為,要改須經人類重新裁示。

    • 使用者選定一個租戶要進入時須同時滿足下列全部條件,任一不符即拒絕並告知原因:1. 使用者已登入平台;2. 平台帳號未被停用、未被封存;3. 該租戶存在;4. 該租戶未被停用、未被封存;5. 使用者對該租戶有訂閱關係;6. 該訂閱關係的狀態為「已生效」

      任一不符即拒絕並告知原因

    • 移除一律先封存,任何移除動作都不得直接抹除資料;要真正清除必須先封存、再刪除,分兩步。

    • 平台帳號停用(可逆,狀態切換):Superadmin 停用/啟用|封存(收起,預設不顯示):Superadmin 執行,帳號無法登入|刪除(永久清除):Superadmin 執行

    • 租戶停用(可逆,狀態切換):Superadmin 停用/啟用|封存(收起,預設不顯示):Superadmin 執行,所有訂閱者一律無法進入|刪除(永久清除):Superadmin 執行

    • 訂閱關係停用(可逆,狀態切換):ADMIN 停權/啟用|封存(收起,預設不顯示):ADMIN 封存,或使用者主動退出|刪除(永久清除):該租戶 ADMIN 執行;Superadmin 亦可

    • 停用與啟用是同一個開關的兩端,可反覆來回切換,是常態管理動作。

    • 訂閱關係的「停權/啟用」同樣是同一個開關的兩端,行為與停用一致:開=已生效、關=已停權。

    • 封存是單向動作,不提供在畫面上解除封存的入口。

    • 封存後記錄完整保留於系統中,預設不出現於任何畫面;管理者開啟封存篩選器後才看得到。

    • 已封存的 Email 與租戶代碼不釋放,不得被再次註冊或建立使用。

    • 訂閱關係被封存後,使用者仍可重新提出申請,重新申請沿用同一筆關係並回到「待審核」。

    • 刪除只能對「已封存」的對象執行,對未封存的對象一律阻擋。

    • 刪除是永久清除、不可復原,系統不保留任何可還原的記錄。

    • 刪除平台帳號時,該帳號的所有訂閱關係一併永久清除。

    • 刪除租戶時,該租戶的所有訂閱關係一併永久清除,但訂閱者的平台帳號不受影響。

    • 刪除後 Email 與租戶代碼即釋放,可被重新註冊或重新建立;新建立的對象與被刪除者無任何關聯。

    • 刪除必須經過二次確認,且須輸入該對象的識別名稱完全一致才能執行。

    • Superadmin 不得對自己的平台帳號執行刪除、停用或封存;管理端不提供對自己帳號的編輯入口,帳號狀態僅供檢視。

    • 所有使用者登入後看到同一套平台層側欄,內含「我的租戶」(訂閱租戶入口+快速切換)與「個人 Profile」兩項;不因身分或角色而有不同版本。

    • 只有 Superadmin 額外看到側欄群組「Super Admin」,底下有「租戶管理」(全平台租戶)與「使用者管理」(全平台使用者);非 Superadmin 的側欄不出現此群組。

    • Superadmin 登入後的落點與一般使用者相同,一體適用 FR-43/FR-44;沒有可進入的租戶時顯示引導狀態,「Super Admin」群組仍可使用。

    • 「租戶管理」一詞僅指 Superadmin 的全平台租戶清單;個人訂閱的租戶一律稱「我的租戶」,兩者不得混用。

    • 後端只回錯誤代碼,中文文案由前端依代碼對照產生,後端訊息不得直接顯示給使用者

    • 畫面上永遠不出現英文錯誤代碼、HTTP 狀態碼、堆疊訊息或資料庫錯誤(NFR-09)

    • 對照表查不到的代碼一律 fallback 為「系統發生錯誤,請稍後再試」

    • 為避免資訊洩漏,多個不同成因會刻意共用同一組代碼與文案(見備註欄)

    • A:表單頂端警示條 vol-form-alert|B:欄位下方紅字|C:Toast 浮動提示|D:頁面頂端警示條(跳轉後顯示)|E:整頁錯誤畫面

    • FR-75(新增/更名自訂角色)的驗證錯誤碼尚未定義(名稱必填、名稱重複、角色不存在)。本表只補 N-8 裁示所需的項目,其餘待人類裁示後補齊。

    07

    狀態轉移

    10 條轉移、7 個狀態。點圖上任一狀態,下表只留與它相關的轉移。

    使用者送出申請ADMIN 核准ADMIN 拒絕使用者重新申請ADMIN 停權ADMIN 啟用ADMIN 封存/使用者主動退出ADMIN 封存使用者重新申請ADMIN 刪除尚無關聯待審核已生效已拒絕已停權已封存已刪除(記錄永久清除)

    點圖上任一狀態,下表只留與它相關的轉移。虛線代表「任一狀態」皆可觸發。

    現況事件新狀態
    使用者送出申請
    ADMIN 核准
    ADMIN 拒絕
    使用者重新申請
    ADMIN 停權
    ADMIN 啟用
    ADMIN 封存/使用者主動退出
    ADMIN 封存
    使用者重新申請
    ADMIN 刪除
    08

    例外與邊界

    40 條。條件 → 行為,一條一行。

    • 尚在審核中就想進入租戶拒絕,並告知「申請審核中」

    • 輸入的租戶代碼不存在拒絕,統一回應「租戶代碼無效」,不透露該代碼是否存在

    • 輸入的租戶代碼屬於已停用或已封存的租戶拒絕,回應內容與代碼不存在時完全一致

    • 申請人想知道審核結果系統不主動通知,使用者端也看不到結果,一律顯示「審核中」

    • 申請被拒後想再試允許不限次數重新申請,狀態回到待審核,且使用者不會察覺曾被拒絕

    • 註冊時輸入已註冊過的 Email不建立新帳號,告知該 Email 已註冊並引導改用登入

    • 已登入者想加入第二個租戶走管道③輸入租戶代碼申請,不得重複註冊

    • 使用者在租戶內操作到一半被停權或封存立即中止其操作權,導回「我的租戶」頁並說明原因

    • 使用者正在租戶內操作時該租戶被停用立即中止其操作權,導回「我的租戶」頁並說明原因

    • 使用者正在操作時平台帳號被停用或封存立即中止所有操作權並導回登入畫面

    • 使用者所有租戶關係都被封存仍可登入平台,畫面回到「尚未加入任何租戶」的引導狀態

    • 使用者主動退出後又想加入允許重新申請,須重新經過審核

    • 租戶唯一的 ADMIN 被移除角色、停權、封存或帳號被停用(含該 ADMIN 自行操作)一律阻擋,須先指派另一位 ADMIN

    • 租戶 ADMIN 移除自己的 ADMIN 角色允許,前提是該租戶仍有其他「具 ADMIN 角色且已生效」的訂閱者;完成後本人立即失去該租戶的 ADMIN 權限

    • 租戶 ADMIN 停權或封存自己允許,前提同上;完成後本人立即失去該租戶的操作權,導回「我的租戶」頁

    • 租戶 ADMIN 對其他 ADMIN 執行角色變更、停權、啟用或封存允許,ADMIN 之間彼此平等;唯不得使該租戶沒有「具 ADMIN 角色且已生效」的訂閱者

    • 刪除仍有訂閱者持有的自訂角色阻擋,須先指定接替角色;指定後系統先把全部持有者改派至接替角色,再刪除原角色(見 FR-78)

    • 刪除無人持有的自訂角色直接刪除,不需指定接替角色

    • 指定的接替角色就是被刪除的角色本身阻擋,接替角色須為該租戶其他現存角色(見 FR-79)

    • 想刪除或編輯系統預設角色 ADMIN/USER一律阻擋,系統預設角色不可編輯、不可刪除(見 FR-76)

    • 已封存的訂閱者、租戶或帳號預設不出現在任何清單、搜尋、統計與下拉選單中,只在管理端開啟封存篩選器時列出

    • 開啟封存篩選器後以關鍵字搜尋已封存的訂閱者、平台使用者或租戶一律搜不到;封存篩選器只讓清單併同列出已封存資料,不擴大任何搜尋的比對範圍,全站對象一體適用(見第 6 節原則 7)

    • 以大寫關鍵字搜尋小寫的姓名、Email、租戶名稱或租戶代碼仍應命中;反向(小寫關鍵字搜大寫內容)亦同。全站搜尋的模糊比對一律不分大小寫(見第 6 節「搜尋通則(全站適用)」)

    • 以全形的英文字母、數字或符號輸入關鍵字,搜尋半形的姓名、Email、租戶名稱或租戶代碼仍應命中;反向(半形關鍵字搜全形內容)亦同。全站搜尋的模糊比對一律不分全形與半形(見第 6 節「搜尋通則(全站適用)」)

    • 關鍵字前後帶有空白(例:貼上內容時多帶到空白)仍應命中;關鍵字前後的空白一律先行去除後才比對(見第 6 節「搜尋通則(全站適用)」)

    • 以繁體關鍵字搜尋只有簡體寫法的內容,或以簡體關鍵字搜尋只有繁體寫法的內容一律搜不到;繁體與簡體視為不同字,兩者不互通,此為刻意的設計決定(見第 6 節「搜尋通則(全站適用)」)

    • 對未封存的對象執行刪除阻擋,並告知須先封存才能刪除

    • 刪除已封存的平台帳號該帳號與其所有訂閱關係一併永久清除,各租戶的訂閱者清單同步不再有此人

    • 刪除已封存的租戶該租戶與其所有訂閱關係一併永久清除,原訂閱者的平台帳號仍可正常登入

    • 刪除後以同一 Email 重新註冊允許,視為全新帳號,不繼承任何舊有訂閱關係與角色

    • 刪除後以同一租戶代碼重新建立租戶允許,視為全新租戶,不繼承任何舊有訂閱者

    • Superadmin 想刪除、停用或封存自己的帳號一律阻擋;管理端不提供對自己帳號的編輯入口,帳號狀態僅供檢視

    • 想還原已刪除的資料無法還原,系統不保留任何可復原的記錄

    • 系統初次上線,尚無任何租戶與使用者Superadmin 先直接建立平台使用者帳號,再以該人為首位 ADMIN 建立首個租戶

    • Superadmin 建立的帳號尚未加入任何租戶可正常登入,畫面停在「尚未加入任何租戶」的引導狀態

    • 同一人在不同租戶角色不同各租戶的角色互相獨立,切換後權限隨當前租戶改變

    • 註冊完成後立刻登入允許,帳號無須驗證即可使用

    • 使用者忘記密碼、無法登入本版無自助救援管道,須線下請平台方協助

    • 連續多次登入失敗暫時鎖定該帳號,鎖定期間即使密碼正確也拒絕登入

    • 想解除某個對象的封存畫面上不提供解除入口,本版無此功能

    09

    風險與 rollback

    0 項未解除。每項風險配當下處置與觸發時的回滾手段。

    最後一個租戶刪不掉的死結(見第 12 節末列)

    須於「租戶業務資料的繼承與移轉」規格一併解決,未解決前不得引入該限制。人類 2026-08-29 裁示(D-6):接受死結,平台最後一個租戶不得刪除;不另設解法。

    現況:本版尚無業務資料,刪除租戶不受繼承限制,死結尚未成立

    封存為單向、畫面無解除入口(第 8 節封存規則 3、第 12 節「解除封存」)

    唯一回復路徑是先刪除再以同一 Email 或租戶代碼重新建立(第 8 節刪除規則 11、FR-66),代價是舊訂閱關係與角色不繼承。

    現況:誤封存無法自助回復

    無忘記密碼救援管道(第 10 節、第 12 節)

    緩解為線下請平台方協助,或由 Superadmin 重建帳號(FR-61)。

    現況:使用者可能被鎖在門外

    刪除永久不可復原(第 8 節刪除規則 8)

    緩解為刪除只能對已封存對象執行(FR-65)、須二次確認並輸入識別名稱完全一致(FR-67)。

    現況:無 rollback 手段

    唯一 ADMIN 的租戶可能失去管理者(第 2 節角色規則 7、FR-58)

    所有會使 ADMIN 歸零的操作一律阻擋;萬一仍陷入無可用 ADMIN,由 Superadmin 代行或指派新 ADMIN(FR-60)。

    現況:唯一 ADMIN 的租戶可能失去管理者

    繁簡不互通為刻意決定(第 6 節搜尋通則 5)

    不得逕自補上互通行為,要改須經人類重新裁示。

    現況:使用者可能誤判為搜尋失效

    10

    Open questions

    2 項待裁示。前往 待裁示問答 作答。

    • Q-EC-FR35錯誤碼契約`CANNOT_MODIFY_ADMIN`/`CANNOT_MODIFY_SELF` 原掛 FR-35,FR-35 已廢除該限制;人類裁示「改掛」,改掛到哪條?

      1. a. FR-58(最後一位 ADMIN 保護)
      2. b. FR-68(Superadmin 不得對自己操作)
      3. c. 兩碼分別掛 FR-58 與 FR-68
      4. d. 其他(填寫)

      已裁示:D-5

    • UNKNOWN-1第 12 節UNKNOWN:「無有效租戶可繼承則不得刪除」在平台僅剩最後一個租戶時形成永遠刪不掉的死結,須於「租戶業務資料的繼承與移轉」規格一併解決(見第 12 節末列)。本規格範圍內無其他未定項。

      已裁示:D-6

    11

    錯誤碼契約

    65 筆。前後端共用的錯誤代碼 ↔ 訊息對照。

    代碼狀態碼訊息時機
    VALIDATION_ERROR400請檢查輸入內容是否正確註冊|呈現 A|各欄位另有 B 層級訊息
    NAME_REQUIRED400請輸入姓名註冊|呈現 B
    NAME_TOO_LONG400姓名長度不可超過 50 字註冊|呈現 B
    EMAIL_FORMAT_INVALID400請輸入正確的 Email 格式註冊|呈現 B
    PASSWORD_TOO_WEAK400密碼至少 8 碼,且須包含英文與數字註冊|呈現 B|NFR-04
    PASSWORD_NOT_MATCH400兩次輸入的密碼不一致註冊|呈現 B
    EMAIL_ALREADY_REGISTERED409此 Email 已註冊,請直接登入註冊|呈現 A|附「前往登入」按鈕
    TENANT_CODE_INVALID422租戶代碼無效註冊|呈現 B|不存在/已停用/已封存共用同一代碼
    TOO_MANY_REQUESTS429操作過於頻繁,請稍後再試註冊|呈現 A
    VALIDATION_ERROR400請輸入 Email 與密碼登入|呈現 A
    INVALID_CREDENTIALS401Email 或密碼錯誤登入|呈現 A|帳號不存在與密碼錯誤共用
    ACCOUNT_LOCKED423登入失敗次數過多,請於 15 分鐘後再試登入|呈現 A|NFR-02
    ACCOUNT_UNAVAILABLE403此帳號已停用,請聯繫平台管理員登入|呈現 A|已停用與已封存共用同一代碼
    TOO_MANY_REQUESTS429操作過於頻繁,請稍後再試登入|呈現 A
    UNAUTHENTICATED401請先登入登入狀態(全站)|呈現 D|後續行為:導向登入頁
    SESSION_EXPIRED401登入已逾期,請重新登入登入狀態(全站)|呈現 D|後續行為:導向登入頁
    ACCOUNT_UNAVAILABLE403此帳號已停用,請聯繫平台管理員登入狀態(全站)|呈現 D|後續行為:導向登入頁
    TENANT_UNAVAILABLE403該租戶已停用,無法進入進入與切換租戶|呈現 D|已停用與已封存共用
    SUBSCRIPTION_NOT_ACTIVE403你的加入申請仍在審核中進入與切換租戶|呈現 D|待審核/已拒絕/已停權共用(FR-41)
    SUBSCRIPTION_NOT_FOUND404你尚未加入此租戶進入與切換租戶|呈現 D|含已封存的關係
    TENANT_ACCESS_DENIED403你沒有存取此租戶的權限進入與切換租戶|呈現 D|嘗試存取非自己租戶時
    TENANT_CODE_INVALID422租戶代碼無效申請加入租戶|呈現 B|不存在/已停用/已封存共用
    (無錯誤)200申請已送出非錯誤碼,申請已送出|申請加入租戶|呈現 C|重複申請時回應與成功完全相同(FR-23)
    TOO_MANY_REQUESTS429操作過於頻繁,請稍後再試申請加入租戶|呈現 B
    CURRENT_PASSWORD_INCORRECT401目前密碼不正確個人 Profile|呈現 B
    PASSWORD_TOO_WEAK400密碼至少 8 碼,且須包含英文與數字個人 Profile|呈現 B
    PASSWORD_NOT_MATCH400兩次輸入的新密碼不一致個人 Profile|呈現 B
    PASSWORD_SAME_AS_CURRENT400新密碼不可與目前密碼相同個人 Profile|呈現 B
    NAME_REQUIRED400請輸入姓名個人 Profile|呈現 B
    NAME_TOO_LONG400姓名長度不可超過 50 字個人 Profile|呈現 B
    EMAIL_NOT_EDITABLE403Email 為身分識別,不可變更個人 Profile|呈現 C
    FORBIDDEN403你沒有執行此操作的權限審核與訂閱者管理|呈現 C|非 ADMIN 或跨租戶
    APPLICATION_NOT_FOUND404該申請不存在或已被處理審核與訂閱者管理|呈現 C|重新載入清單
    APPLICATION_ALREADY_HANDLED409該申請已被其他管理員處理,請重新整理審核與訂閱者管理|呈現 C
    SUBSCRIBER_NOT_FOUND404找不到該訂閱者審核與訂閱者管理|呈現 C|含已被封存者
    SUBSCRIBER_STATE_CONFLICT409訂閱者狀態已變更,請重新整理審核與訂閱者管理|呈現 C
    CANNOT_MODIFY_ADMIN403無法對管理員執行此操作審核與訂閱者管理|呈現 C|FR-58(原掛 FR-35,D-5 改掛)
    CANNOT_MODIFY_SELF403無法對自己執行此操作審核與訂閱者管理|呈現 C|FR-58(原掛 FR-35,D-5 改掛)
    NOT_ARCHIVED409請先封存後才能刪除審核與訂閱者管理|呈現 C|FR-65,刪除未封存訂閱者時
    CONFIRM_TEXT_MISMATCH400輸入的內容不正確審核與訂閱者管理|呈現 B|FR-67,刪除確認欄位
    ROLE_NOT_EDITABLE403系統預設角色不可編輯角色管理|呈現 C|FR-76,ADMIN/USER
    ROLE_NOT_DELETABLE403系統預設角色不可刪除角色管理|呈現 C|FR-76
    REPLACEMENT_ROLE_REQUIRED409仍有訂閱者持有此角色,請指定接替角色角色管理|呈現 B|FR-78
    REPLACEMENT_ROLE_INVALID400接替角色無效,請改選其他角色角色管理|呈現 B|FR-79,含選到被刪除角色本身
    SUPERADMIN_ONLY403你沒有執行此操作的權限平台管理|呈現 C
    TENANT_CODE_DUPLICATED409此租戶代碼已被使用,請改用其他代碼平台管理|呈現 B|FR-51
    USER_NOT_FOUND404找不到此平台使用者平台管理|呈現 B|FR-52
    EMAIL_ALREADY_REGISTERED409此 Email 已註冊,無法重複建立平台管理|呈現 B|FR-62
    NAME_REQUIRED400請輸入姓名平台管理|呈現 B|建立使用者
    PASSWORD_TOO_WEAK400密碼至少 8 碼,且須包含英文與數字平台管理|呈現 B|建立使用者
    LAST_ADMIN_PROTECTED409此租戶必須保留至少一位管理員平台管理|呈現 C|FR-58
    ROLE_CANNOT_BE_EMPTY409每位訂閱者至少須保留一個角色平台管理|呈現 C|FR-54
    TENANT_NOT_FOUND404找不到此租戶平台管理|呈現 E|含已封存者
    ALREADY_ARCHIVED409此對象已被封存平台管理|呈現 C
    CONFIRM_NAME_MISMATCH400輸入的租戶名稱不正確平台管理|呈現 B|封存租戶時
    NOT_ARCHIVED409請先封存後才能刪除平台管理|呈現 C|FR-65
    CONFIRM_TEXT_MISMATCH400輸入的內容不正確平台管理|呈現 B|FR-67
    CANNOT_DELETE_SELF403無法刪除自己的帳號平台管理|呈現 C|FR-68
    VALIDATION_ERROR400請檢查輸入內容是否正確通用|呈現 A
    NOT_FOUND404找不到此頁面通用|呈現 E
    TOO_MANY_REQUESTS429操作過於頻繁,請稍後再試通用|呈現 A
    INTERNAL_ERROR500系統發生錯誤,請稍後再試通用|呈現 A
    SERVICE_UNAVAILABLE503服務暫時無法使用,請稍後再試通用|呈現 E
    NETWORK_ERROR0網路連線異常,請檢查連線後再試通用|呈現 A|HTTP:—
    UNKNOWN0系統發生錯誤,請稍後再試通用|呈現 A|HTTP:—

    本站即規格的唯一事實來源,條文改動一律改 apps/specs/src/data/<feature>/;不寫 markdown spec。