Skip to content

Task 3-2: Integration Test - RBAC Role Check

Phase: 3 - Testing Priority: Medium Depends on: task-1-1 Reference: SPEC.md — xem mục 4 (ADM-F-02 RBAC) và mục 5 (Acceptance Criteria: "Admin với wrong role → 403")

Background

Test RBAC: admin với role không đủ quyền phải nhận 403.

Test scenarios

Setup note: Tạo test class AdminRbacIntegrationTest trong admin/src/test/java/. Cần seed ít nhất hai admin accounts trong test DB: - Account 1: SUPER_ADMIN role - Account 2: regular ADMIN (hoặc OPERATOR) role

Dùng @BeforeEach để login cả hai account và lưu lại JWT tokens tương ứng. Đảm bảo RoleEnum.SUPER_ADMIN được assign đúng cho Account 1.

CheatController RBAC (sau task-1-1)

  • [ ] Login với SUPER_ADMIN role → POST /api/admin/cheats/add-coin → success

    Verify HTTP 200, không có 403 trong response

  • [ ] Login với regular ADMIN role → POST /api/admin/cheats/add-coin → 403 Forbidden

    Verify HTTP 403; Spring Security phải block tại @PreAuthorize level trước khi method body chạy

Feature toggle (ops-level)

  • [ ] Admin với OPERATOR role → PUT /api/admin/feature-toggles/{key} → depends on rule config

    Xem RuleEnum để biết rule nào guard endpoint này; test với admin có và không có rule đó

  • [ ] Admin không có rule → 403

    Verify HTTP 403 với error message liên quan đến authorization

Read vs write

  • [ ] Admin với READ_ONLY role → GET endpoints thành công, POST/PUT/DELETE → 403

    Test ít nhất một GET endpoint (ví dụ GET /api/admin/users) và một POST endpoint (ví dụ POST /api/admin/users) với READ_ONLY token

Verification / Acceptance Criteria

  • [ ] SUPER_ADMIN có thể gọi /cheats/add-coin: HTTP 200 trả về sau task-1-1 được implement
  • [ ] Non-SUPER_ADMIN bị block tại /cheats/add-coin: HTTP 403 trả về; không có audit log [CHEAT_AUDIT] (vì block trước khi vào method)
  • [ ] Rule-based guard hoạt động đúng: Admin với đúng rule → 200; admin thiếu rule → 403
  • [ ] READ_ONLY enforcement: READ_ONLY admin không thể gọi bất kỳ mutating endpoint nào
  • [ ] Tất cả test scenarios pass: Chạy AdminRbacIntegrationTest → 0 failures
  • [ ] Test class tham khảo: AdminRbacIntegrationTest — đặt trong admin/src/test/java/.../controller/

Files to Modify

(Test-only task — không modify production code, chỉ tạo/cập nhật test files)

  • admin/src/test/java/.../controller/AdminRbacIntegrationTest.java (new hoặc update)