File size: 2,835 Bytes
325b400
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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.**

"""