排班主管 · 10
主管調店
在同一次角色更新中移除原店、加入新店,避免只完成一半的權限狀態。
完成結果陳小文副理由台北信義店外場調至台北中正店外場;原組別權限移除,新組別權限生效。
實際案例
managers.json 中,陳小文副理目前只管理台北信義店外場;現在要調任台北中正店外場。主管調店是兩個 role change:移除原 Squad scope、加入目的 Squad scope;不需要建立另一個主管帳號。
資料流
- 1取得目前完整角色以 manager ID 找到原本的信義店外場 Squad manager role。
GET /v1/managers - 2解析目的 Squad由組別資料取得台北中正店外場 ID sqmmrnwtvxxiH。
GET /v1/squads - 3組合兩筆變更第一筆移除信義外場 oldRole,第二筆新增中正外場 newRole。
role changes - 4一次更新同一 request 送出兩筆變更;任一 scope 無權限時整次不生效。
PUT /v1/manager/{id}/roles - 5回讀驗證確認只剩中正店外場 manager role。
GET /v1/managers
欄位 mapping
| 變更 | scope | unit | role 欄位 |
|---|---|---|---|
| 移除原店外場 | sqmmhw5vonCzo | squad | oldRole: manager |
| 新增目的店外場 | sqmmrnwtvxxiH | squad | newRole: 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。只要原店或目的店其中一個不在授權範圍,整次角色更新都不會生效,因此不會留下只刪除、未新增的中間狀態。