角色如何儲存分店範圍
角色上的每一項客戶或員工權限都會以 base64 編碼存放在 p 欄位中。該欄位中的每一筆資料都附帶 location_id,因此同一個角色可以在某一分店授予完整存取權限,並在另一分店僅授予唯讀權限。
系統另外維護一份 roles_with_location 對照表,格式為 roleId-locId1,locId2。介面便是依此清單顯示角色目前綁定哪些分店,不必逐一解碼每一個權限位元。
名為 permissionLocations 的 computed getter 會回傳使用者擁有非無權限之分店 ID 集合,這便是分店選擇器與分店感知頁面共同依據的唯一真實來源。
在角色頁面編輯角色
前往管理者 → 設定 → 角色即可管理角色清單。若帳號啟用了多分店功能,每一筆角色列右側都會出現一個內嵌的 <app-location-picker>。
該內嵌選擇器會顯示角色目前授予存取權限的分店清單。如需將角色擴展到新分店,請開啟選擇器、勾選該分店並儲存。此變更會同時寫回編碼後的 p 欄位與 roles_with_location 對照表。
- 勾選分店即可在該分店授予此角色之權限。
- 取消勾選即可撤銷該分店上所有相關權限。
- 若一個角色未勾選任何分店,等同於未啟用,員工的選擇器中也不會出現。
角色與分店的組合運算
員工的實際存取權限永遠是角色之分店範圍與員工被指派分店之交集。若角色允許 A、B 分店,而員工被指派至 B、C 分店,員工實際僅在 B 分店具備存取權限。
因此您可以放心在多個分店重複使用同一個角色,再透過員工的分店指派來縮小實際範圍,不必為每個分店複製一份角色。
- 解碼角色的 permissionLocations。
- 讀取員工被指派的分店。
- 兩者交集即為員工實際可用的分店。
