人員管理保護機制(CheckProtectedAsync)
當虛擬部門已完成考核確認、週期已鎖定或年度專案已鎖定時,HR 修改人員管理需輸入管理員密碼。
保護條件(任一成立即觸發)
- 考核週期已
Locked - 年度專案已
Locked - 該員工所屬虛擬部門的
DepartmentConfirmation(GradeReview 或 Settlement)已Confirmed
密碼驗證通過後自動解鎖
- 週期
Locked→ 解鎖回Active - 年度專案
Locked→ 解鎖回Settled - 該虛擬部門的
DepartmentConfirmation→ 作廢
受保護的 8 個端點
| 端點 | 類型 | Helper |
|---|---|---|
PUT participants/{id}/reviewers | 單筆 | CheckProtectedAsync |
PUT participants/{id}/exclude | 單筆 | CheckProtectedAsync |
PUT participants/batch-exclude | 批次 | CheckProtectedBatchAsync |
DELETE participants/batch-delete | 批次 | CheckProtectedBatchAsync |
PUT participants/batch-clear | 批次 | CheckProtectedBatchAsync |
PUT participants/batch-include | 批次 | CheckProtectedBatchAsync |
PUT participants/{id}/job-level | 單筆 | CheckProtectedAsync |
PUT participants/batch-job-level | 批次 | CheckProtectedBatchAsync |
前端保護閘門(兩層機制)
- 前置保護閘門(
protectionGate):操作前先查GET /hr/periods/{id}/protection-map,若部門已鎖定/已確認,立刻彈出紅色警告 Modal 列出所有影響(解鎖週期、作廢確認等),要求輸入 HR 管理員密碼後才開啟編輯對話框。密碼存入preAuthedPassword,自動帶入後續 API 呼叫。 - 後端攔截 fallback(
protectedOp):若前端預檢資料過期,後端CheckProtectedAsync仍會擋下並回傳含「HR管理員密碼」的錯誤,前端自動彈出密碼 Modal 重試。
Protection Map API
GET /api/hr/periods/{periodId}/protection-map — 回傳:
periodLocked:週期是否已鎖定projectLocked:年度專案是否已鎖定confirmedDepartments:各虛擬部門的 GradeReview / Settlement 確認狀態