Task 1-1: Guard CheatController với SUPER_ADMIN Role Only
Phase: 1 - Security Priority: Critical Module:
adminDepends on: Không có Reference:docs/BountyHunter-Backend/details/feature-admin/SPEC.md
Background
CheatController có endpoint addCoin cho phép thêm coin vào tài khoản user bất kỳ. Nếu bất kỳ admin nào có quyền gọi endpoint này, đây là rủi ro nghiêm trọng.
Tasks
File: admin/controller/cheat/CheatController.java
- [ ] Xác nhận annotation security hiện tại. Nếu chưa có
@PreAuthorize, hãy thêm vào. - [ ] Thêm SUPER_ADMIN restriction:
@PreAuthorize("hasRole('SUPER_ADMIN')") @PostMapping("/add-coin") public Result<?> addCoin(@RequestBody AddCoinUserRequest request) { LOGGER.warn("[CHEAT_AUDIT] SUPER_ADMIN {} adding {} coin to userId={}", getCurrentAdminId(), request.getAmount(), request.getUserId()); // ... giữ nguyên logic hiện tại ... } - [ ] Inject
SlackNotificationServicevào controller (nếu chưa có) và thêm Slack notification khi endpoint được gọi thành công:
slackNotificationService.sendAlert(
"[CHEAT] addCoin called by admin=" + getCurrentAdminId() +
" userId=" + request.getUserId() + " amount=" + request.getAmount()
);
Verification / Acceptance Criteria
- [ ] Kiểm tra file
RoleEnum.javađảm bảoSUPER_ADMINtồn tại. - [ ] Đảm bảo code compile không lỗi (đặc biệt là các dependency injection cho Slack service và Logger).
- [ ] (Optional) Viết hoặc cập nhật test case trong
CheatControllerTest.javađể assert rằng user không có roleSUPER_ADMINsẽ nhận về HTTP 403 Forbidden.
Files to Modify
admin/controller/cheat/CheatController.java- (Có thể)
admin/controller/cheat/CheatControllerTest.java