操作章節 08
管理員與角色
誰可以操作管理主控台,以及他到底能操作到什麼程度。
| 頁面 | 路徑 | 選單 | 權限 |
|---|---|---|---|
| 使用者 | /user | 管理員 › 使用者 | user:R |
| 角色 | /role | 管理員 › 角色 | role:R |
使用者與成員的差別。 使用者(User) 是主控台管理員,會登入這套系統;成員(Member) 是取用存取權的受管人員,從不登入主控台。兩者是不同的帳號類型,權限也各自獨立。這一章講的是使用者,成員請見 02 · 成員。
這一章能幫你完成什麼
- 身為系統管理員,我想建立主控台管理員帳號,讓同事可以一起維運這個平台。
- 身為系統管理員,我想指派角色給管理員,讓他剛好拿到工作需要的存取範圍。
- 身為系統管理員,我想用個別權限組出角色,讓最小權限能被具體表達。
- 身為資安負責人,我希望任何人都無法授出自己沒有的權限,杜絕透過主控台提權。
第一部分——主控台管理員(使用者)
1. 使用者清單
1.1 欄位
| 欄位 | 說明 |
|---|---|
| 名稱 | 顯示名稱。系統帳號會帶有 系統 標籤。 |
| 電子信箱 | 登入位址。 |
| 狀態 | 啟用中/未啟用/待處理/已鎖定。 |
| 強制 MFA | 政策是否強制此帳號使用 MFA(開/關)。 |
| 已啟用 MFA | 帳號是否真的完成驗證器註冊(開/關)。 |
| 建立時間 | 未知時顯示 -。 |
| 更新時間 | 未知時顯示 -。 |
| 建立者 | 未知時顯示 -。 |
| 更新者 | 未知時顯示 -。 |
| 操作 | 依狀態與權限過濾後的按鈕。 |
1.2 狀態
| 狀態 | 標籤 | 意義 |
|---|---|---|
| ACTIVE | 啟用中 | 正常帳號。 |
| INACTIVE | 未啟用 | 已被停用。 |
| PENDING | 待處理 | 已建立,等待啟用。 |
| LOCKED | 已鎖定 | 因異常行為被鎖定。 |
1.3 篩選
| 篩選條件 | 型態 | 說明 |
|---|---|---|
| 關鍵字 | 文字 | 對名稱與電子信箱做模糊比對。 |
| 電子信箱 | 文字 | 對電子信箱做模糊比對。 |
| 狀態 | 核取方塊 | 多選;都不勾 = 全部。 |
1.4 列的捷徑
雙擊某一列可開啟詳細頁。至少勾選一個核取方塊之後,單擊列身可切換選取狀態。
2. 管理員可用的操作
從清單列或詳細頁工具列可用的操作:
| 操作 | 允許的狀態 | 權限 |
|---|---|---|
| 詳細資料 | 任何狀態 | user:R |
| 複製 | 任何狀態 | user:C |
| 停用 | ACTIVE | user:U |
| 啟用 | INACTIVE | user:U |
| 解鎖 | LOCKED | user:U |
| 重寄啟用信 | PENDING | user:U |
| 重設 MFA | ACTIVE / LOCKED | user:U |
| 刪除 | INACTIVE / LOCKED / PENDING | user:D |
| 日誌 | 任何狀態 | auditLog:R |
各狀態實際會顯示哪些按鈕:
| 狀態 | 按鈕 |
|---|---|
| ACTIVE | 複製、停用、重設 MFA、日誌 |
| INACTIVE | 複製、啟用、刪除、日誌 |
| PENDING | 複製、重寄啟用信、刪除、日誌 |
| LOCKED | 複製、解鎖、重設 MFA、刪除、日誌 |
使用者沒有強制刪除的退路。 刪除被拒絕就是被拒絕,必須先自行排除原因。
3. 建立管理員
路徑: /user/create · 權限: user:C
兩個步驟的精靈,加上結果頁。
3.1 步驟一——基本資料
| 欄位 | 必填 | 規則 |
|---|---|---|
| 名稱 | 是 | 輸入時即時檢查唯一性。 |
| 電子信箱 | 是 | 電子郵件格式,輸入時即時檢查唯一性。 |
以下欄位由流程固定,你不需要(也不能)選擇:
| 欄位 | 值 |
|---|---|
| 狀態 | PENDING——帳號透過信件流程啟用。 |
| 密碼模式 | 自動——後端產生臨時密碼並寄出。 |
| 強制 MFA | false——管理員自己到個人資料頁啟用 MFA。 |
3.2 步驟二——指派角色
勾選這位管理員應該持有的角色。你也可以建立一個完全沒有角色的帳號。
要編輯這個欄位需要兩種權限:user:U 與 role:U。 指派角色同時會寫入使用者、並把該角色的權限交出去,所以兩側都必須有資格。缺其中一個,整份角色清單就變成唯讀並附上說明——你仍然可以建立帳號,只是不帶角色。
選擇角色時會依你自己的權限做驗證:
| 情況 | 會發生什麼 |
|---|---|
| 該角色的權限是你權限的子集 | 沒問題,可以送出。 |
| 該角色含有你沒有的權限 | 該列變紅、訊息指出是哪個角色,而且 送出按鈕停用。 |
| 驗證仍在進行中 | 送出也會停用——否則你就能搶在檢查之前送出。 |
| 取消勾選某個角色 | 永遠允許——移除授權只會降低權限。 |
這項判斷需要 permission:R(用來讀取權限目錄)。若沒有這個權限,或檢查因任何原因失敗,Merak 會 安全地失敗:該角色會被擋下,而不是在未驗證的情況下放行。
3.3 步驟三——結果
系統先建立帳號,接著逐一指派所選角色。若部分角色指派失敗,結果頁會明確回報部分失敗,而不是宣稱成功。
4. 複製管理員
入口: 清單列 → /user/create/:id · 詳細頁工具列 → /user/:id/create · 權限: user:C
| 欄位 | 帶入的值 |
|---|---|
| 名稱 | <來源名稱> - Copy,重複時加編號(Copy1、Copy2……)。 |
| 電子信箱 | <local>+copy<n>@<domain>(子位址寫法)。 |
| 角色 | 來源的角色,經過下述防提權過濾之後。 |
4.1 複製永遠不會讓你拿到比原本更多的權限
複製是一次建立,不是權限的移轉。 任何帳號都可以被複製——包含 Super Admin,也包含你自己;來源不受限制。但複製出來的帳號絕不能讓操作者拿到超過他既有的權限。
過濾規則:只有當來源角色所含的每一項權限你都持有時,該角色才會被帶入。 只要缺一項權限,整個角色就會從預填中移除——因為角色是整包授予的,沒有「只授予角色的一部分」這回事。
| 情況 | 結果 |
|---|---|
你讀不到權限目錄(permission:R) | 完全不帶入任何角色——安全地失敗。 |
你讀不到角色(role:R) | 不帶入任何角色。 |
| 你是 Super Admin 複製另一位 Super Admin | 全部通過,角色照常帶入。 |
| 你持有的權限比來源少 | 過大的角色會從預填中被移除。 |
被移除的角色絕不會默默消失——系統會以警告通知告訴你,有幾個角色因為你無法授予而沒有被複製。你仍然可以在步驟二手動勾選角色,那裡套用同樣的驗證與同樣的伺服器端檢查,結果完全一致。
5. 管理員詳細頁
路徑: /user/:id · 權限: user:R
顯示名稱、電子信箱、狀態、強制 MFA 與已啟用 MFA、是否為系統帳號、建立與更新時間及操作者,以及已指派的角色。
只有 顯示名稱 可以就地編輯;角色透過角色選擇器管理。
第二部分——角色
6. 什麼是角色
角色(Role) 是一組具名的權限集合。角色是 租戶範圍 的:你看到的角色屬於你的租戶。
後端內建數個 系統角色——Admin、ReadOnly、Member Editor、User Editor、Application Editor 等。它們在清單中帶有 系統 標記。
| 對系統角色的操作 | 是否允許 |
|---|---|
| 檢視 | 可以 |
| 複製 | 可以——複製只讀取來源,產生的是一個全新的一般角色。 |
| 編輯 | 不可 |
| 刪除 | 不可 |
7. 角色清單
| 欄位 | 說明 |
|---|---|
| 角色名稱 | 系統角色會加上 系統 標記。 |
| 描述 | 會截斷,滑鼠停留可看全文。 |
| 建立時間 | 未知時顯示 -。 |
| 更新時間 | 未知時顯示 -。 |
| 建立者 | 未知時顯示 -。 |
| 更新者 | 未知時顯示 -。 |
| 操作 | 詳細資料/複製/刪除。 |
篩選: 只有一個 關鍵字 欄位,模糊比對名稱與描述。 分頁: 預設每頁 10 筆。
| 操作 | 權限 | 系統角色 |
|---|---|---|
| 詳細資料 | role:R | 允許 |
| 複製 | role:C | 允許 |
| 刪除 | role:D | 禁止 |
雙擊某一列可開啟詳細頁;進入選取模式後,單擊可切換選取狀態。
8. 建立與編輯角色
路徑: /role/create · 權限: role:C
一個含兩個欄位的對話框:
| 欄位 | 必填 | 規則 |
|---|---|---|
| 角色名稱 | 是 | 1–50 字元,且必須唯一。 |
| 描述 | 否 | 上限 200 字元。 |
編輯是在角色詳細頁上就地進行,需要 role:U。
複製角色(清單的 /role/create/:roleId、詳細頁的 /role/:roleId/create)會帶入 <來源名稱> - Copy 並在重複時加編號,權限則帶入來源的權限、但過濾成你有資格授予的那些——與 §4.1 是同一條防提權規則。
9. 管理角色的權限
路徑: /role/:roleId/permission
權限子頁列出這個角色目前授予的內容:
| 欄位 | 說明 |
|---|---|
| 資源 | 在地化標籤,例如「成員」。 |
| 動作 | 在地化標籤,例如「建立」。 |
| 權限 | 在地化的完整名稱,例如「建立成員帳號」。 |
| 操作 | 移除。 |
表格上方有一個 搜尋 框,會即時比對資源、動作或名稱;另有一個 資源 下拉選單可篩選單一資源(選項由實際存在的列組出,第一項是「所有資源」)。
9.1 新增權限
- 點選 新增 按鈕。
- 從權限目錄中勾選。已指派的項目會被排除。
- 點選 新增。
你只能勾選自己持有的權限。 這與其他地方是同一條防提權規則:主控台絕不能成為替自己加權的途徑。
9.2 移除權限
在該列點選 移除 並確認。移除不受限制——降低權限永遠是安全的操作。
9.3 一次只做一件事
當新增對話框開啟中,或有新增/移除請求正在進行時,其他控制項會停用,受影響的列會顯示載入動畫。這可以避免對同一個角色送出兩筆互相衝突的寫入。
10. 權限目錄
權限的格式是 資源:動作。目錄中共有 12 種資源 × 4 種動作 = 42 個權限,而且集合是固定的——Merak 不會在執行期發明新的權限。
| 資源 | 鍵值 | 管轄範圍 |
|---|---|---|
| 使用者 | user | 主控台管理員帳號 |
| 成員 | member | 受管人員 |
| 裝置 | device | 註冊到成員名下的裝置 |
| 應用程式 | application | 已發布的服務 |
| 組織 | organization | 群組 |
| 角色 | role | 角色 |
| 權限 | permission | 權限目錄本身(讀取) |
| Token 申請 | tokenRequest | 審批 |
| 稽核日誌 | auditLog | 稽核日誌與連線日誌 |
| 租戶 | tenant | 租戶資訊 |
| 授權 | license | 授權與配額資訊 |
| Merak Node | merakNode | 邊緣路由節點 |
| 動作 | 字母 |
|---|---|
| 建立 | C |
| 檢視 | R |
| 修改 | U |
| 刪除 | D |
並非每一種組合後端都會發出——例如 auditLog:C 從來不存在,因為稽核日誌不是你能建立的東西。從未被授予的權限,在判斷上就等同於「不允許」。
完整的逐頁對照表在 附錄 A。
11. 防提權機制總覽
四道各自獨立的防線,執行的是同一條規則——你永遠無法授出自己沒有的權限:
| 位置 | 防線 |
|---|---|
| 複製使用者 | 只有當你持有來源角色的每一項權限時,該角色才會被帶入。 |
| 複製角色 | 來源權限會被過濾成你有資格授予的那些才帶入。 |
| 手動指派角色給使用者 | 選到權限過大的角色時,該列變紅且送出停用。 |
| 以 CSV 匯入角色 | 權限欄的選項清單只含你持有的權限;你沒有的權限,在檔案中根本無法被解析出來。 |
四道防線都 安全地失敗:若檢查無法完成——權限目錄讀不到、角色權限抓不回來——該角色或權限一律拒絕,而不是在未驗證的情況下放行。後端會獨立執行同一條規則;這些前端防線的存在,是為了讓那個請求根本不會被送出去。
12. 批次作業
使用者與角色都支援 匯出、多選批次操作 與 CSV 匯入。
- 使用者: 批次停用/啟用/解鎖/刪除。匯出檔含有 角色 欄(需
role:R)。匯入可以在建立使用者的同時指派角色;只要有任何一個角色指派失敗,整列就算失敗。 - 角色: 只有批次刪除——角色沒有生命週期狀態。系統角色會在一開始就被排除在可執行集合之外,而不是讓它們一筆一筆去失敗。匯出檔含有 權限 欄(需
permission:R)。匯入時,若角色本體建立成功、但其中一項權限授予失敗,該列仍然算 成功——只有角色本體建立失敗才會讓該列失敗。
完整說明:09 · 批次作業。
13. 權限總表
| 工作 | 權限 |
|---|---|
| 檢視管理員 | user:R |
| 建立/複製/匯入管理員 | user:C |
| 編輯、停用、啟用、解鎖、重寄啟用信、重設 MFA | user:U |
| 刪除管理員 | user:D |
| 編輯使用者上的角色欄位 | user:U 與 role:U |
| 驗證角色選擇 | permission:R |
| 檢視角色 | role:R |
| 建立/複製/匯入角色 | role:C |
| 編輯角色 | role:U |
| 刪除角色 | role:D |
| 新增或移除角色的權限 | role:U + permission:R |