# Cơ chế bảo mật (Security Mechanisms)

Dựa trên mã nguồn thực tế tại `backend/auth/`, hệ thống áp dụng các lớp bảo mật sau:

1. **Password Hashing:** 
   Mật khẩu được băm (hash) bằng thư viện `bcrypt` với `gensalt()` trước khi lưu trữ (`hash_password`). Quá trình kiểm tra mật khẩu sử dụng `bcrypt.checkpw()` (`verify_password`). Hệ thống không bao giờ lưu plaintext password.

2. **FastAPI Middleware Guard (`get_current_user`):** 
   Mọi API cần bảo vệ đều yêu cầu dependency này. Middleware trích xuất token từ header `Authorization: Bearer <token>`.
   - Nếu thiếu hoặc sai format, trả về HTTP 401 (`Missing or invalid token`).
   - Nếu token không hợp lệ hoặc hết hạn, trả về HTTP 401 (`Token expired or invalid`).
   - Middleware tiếp tục query vào PostgreSQL (`admin_users`) dựa trên `sub` (user_id) trong payload để đảm bảo user vẫn tồn tại trong hệ thống. Nếu user bị xóa, sẽ trả về 401 (`User not found`).

3. **Role-based Access Control (RBAC):**
   Hệ thống cung cấp các hàm kiểm tra quyền chi tiết để sử dụng trong endpoint:
   - `require_admin`: Trả về 403 (`Chỉ admin mới có quyền thực hiện thao tác này`) nếu user có role khác `admin`.
   - `require_editor_or_admin`: Trả về 403 (`Bạn không có quyền chỉnh sửa`) nếu role không thuộc nhóm `admin` hoặc `editor`.
