跳至主要内容

排班主管 · 10

主管調店

在同一次角色更新中移除原店、加入新店,避免只完成一半的權限狀態。

完成結果陳小文副理由台北信義店外場調至台北中正店外場;原組別權限移除,新組別權限生效。

實際案例​

managers.json 中,陳小文副理目前只管理台北信義店外場;現在要調任台北中正店外場。主管調店是兩個 role change:移除原 Squad scope、加入目的 Squad scope;不需要建立另一個主管帳號。

資料流​

  1. 1取得目前完整角色以 manager ID 找到原本的信義店外場 Squad manager role。GET /v1/managers
  2. 2解析目的 Squad由組別資料取得台北中正店外場 ID sqmmrnwtvxxiH。GET /v1/squads
  3. 3組合兩筆變更第一筆移除信義外場 oldRole,第二筆新增中正外場 newRole。role changes
  4. 4一次更新同一 request 送出兩筆變更;任一 scope 無權限時整次不生效。PUT /v1/manager/{id}/roles
  5. 5回讀驗證確認只剩中正店外場 manager role。GET /v1/managers

欄位 mapping​

變更scopeunitrole 欄位
移除原店外場sqmmhw5vonCzosquadoldRole: manager
新增目的店外場sqmmrnwtvxxiHsquadnewRole: manager

Request​

PUT /v1/manager/9itv2cd6-702a-owid-876d-mdo28vbna76e/roles
Content-Type: application/json

{
"roles": [
{
"scope": "sqmmhw5vonCzo",
"unit": "squad",
"oldRole": "manager"
},
{
"scope": "sqmmrnwtvxxiH",
"unit": "squad",
"newRole": "manager"
}
]
}

預期回讀 Response​

managers.json 保留操作前的信義外場權限;下列是調店後應回讀到的預期狀態:

{
"data": [
{
"id": "9itv2cd6-702a-owid-876d-mdo28vbna76e",
"email": "manager.chen@example.com",
"title": "外場主管",
"name": "陳小文副理",
"nickname": "Love",
"portrait": "https://example.com/portraits/manager-chen-002.png",
"roles": [
{"scope": "sqmmrnwtvxxiH", "role": "manager", "unit": "squad"}
]
}
]
}

驗收結果​

  • 主管帳號與 manager ID 不變,沒有建立重複帳號。
  • 信義店外場 Squad role 已移除。
  • 中正店外場 Squad role 已新增,且沒有遺漏其他原本應保留的 scope。
一次請求不會只成功一部分

Service Account 必須有權管理 request 內的每個 scope。只要原店或目的店其中一個不在授權範圍,整次角色更新都不會生效,因此不會留下只刪除、未新增的中間狀態。