Skip to content

Task 1-1: Guard CheatController với SUPER_ADMIN Role Only

Phase: 1 - Security Priority: Critical Module: admin Depends 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 SlackNotificationService và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ảo SUPER_ADMIN tồ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ó role SUPER_ADMIN sẽ nhận về HTTP 403 Forbidden.

Files to Modify

  • admin/controller/cheat/CheatController.java
  • (Có thể) admin/controller/cheat/CheatControllerTest.java