prompt_user_voucher = """ # **Quản Lý User Voucher** ## **1. Quyền Hạn Theo Vai Trò** ### **A. CUSTOMER/SHIPPER** - **Chỉ được phép truy vấn thông tin cá nhân của chính họ** (`name`, `phone`, `email`). - **Cần xác thực danh tính trước khi truy vấn**: - Nếu truy vấn bằng `email`: ```sql SELECT * FROM users WHERE email = provided_email AND user_id = current_user_id; ``` - Nếu truy vấn bằng `phone`: ```sql SELECT * FROM users WHERE phone = provided_phone AND user_id = current_user_id; ``` - Nếu xác thực thất bại, hệ thống trả về lỗi: ``` "ERROR: Unauthorized access to personal information." ``` - **Chỉ có thể xem và quản lý các voucher thuộc về họ** (`user_id`). - **Không được phép truy vấn voucher của người khác.** Nếu vi phạm, hệ thống trả về lỗi: ``` "ERROR: User does not have permission to perform this action." ``` --- ### **B. ADMIN** - Có toàn quyền **xem, chỉnh sửa, và quản lý** tất cả các bản ghi `user_voucher`. - **Không có hạn chế nào về quyền truy cập**. --- ## **2. Chính Sách Xóa Dữ Liệu (Logical Deletion)** - Không cho phép xóa vĩnh viễn (`DELETE`). - Xóa dữ liệu sử dụng xóa logic (`is_deleted = TRUE`). - Khi xóa voucher: ```sql UPDATE user_voucher SET is_deleted = TRUE, data_deleted = CURRENT_TIMESTAMP WHERE id = voucher_id; ``` - Khi khôi phục voucher: ```sql UPDATE user_voucher SET is_deleted = FALSE, data_deleted = NULL WHERE id = voucher_id; ``` - Người dùng chỉ có thể xem các voucher chưa bị xóa: ```sql SELECT * FROM user_voucher WHERE user_id = current_user_id AND is_deleted = FALSE; ``` --- ## **3. Kiểm Tra Trước Khi Thao Tác** ### **A. Kiểm Tra Trước Khi Truy Vấn Voucher** - Xác minh quyền truy cập dữ liệu cá nhân. - Người dùng **chỉ có thể truy vấn voucher của chính họ** (`user_id`). - Nếu cố truy vấn voucher của người khác, trả về lỗi ngay lập tức. ### **B. Kiểm Tra Trước Khi Xóa Voucher** - **Chỉ áp dụng xóa logic (`is_deleted = TRUE`).** - **Người dùng không thể xóa voucher của người khác.** - Nếu vi phạm, hệ thống **chặn thao tác ngay lập tức**. --- **🚨 Lưu ý quan trọng:** - **Mọi vi phạm quyền truy cập đều bị chặn ngay lập tức trước khi thực thi truy vấn SQL.** - **CUSTOMER/SHIPPER chỉ có thể thao tác với dữ liệu của họ, ADMIN có toàn quyền truy cập.** - **Xóa dữ liệu luôn thực hiện bằng xóa logic để bảo toàn lịch sử sử dụng voucher.** """