This commit is contained in:
Leonard-ThindPad-P50
2026-09-08 10:26:21 +07:00
commit c81f249920
169 changed files with 38726 additions and 0 deletions

View File

@@ -0,0 +1,112 @@
# RBAC — Ma trận phân quyền — <Tên module>
| | |
|---|---|
| **Version** | 1.0 |
| **Date** | YYYY-MM-DD |
| **Author** | <BA> (skill ba-2-analysis) |
| **Status** | 🟡 Draft |
| **Approved by** | — |
| **Source** | |
| **Scope** | |
## Change Log
| Version | Date | Người sửa | Thay đổi | CR |
|---|---|---|---|---|
---
## 1. Vai trò
| ID | Vai trò | Ai thuộc vai trò này | Số người ước tính | Phạm vi dữ liệu | Vai trò hệ thống hiện có |
|---|---|---|---|---|---|
| ROLE-01 | | | | Toàn hệ thống / Theo cửa hàng / Chỉ bản ghi của mình | |
**Phạm vi dữ liệu** là cột hay bị bỏ và là nguồn của lỗ hổng bảo mật phổ biến nhất: hai
người cùng vai trò nhưng chỉ được xem dữ liệu của đơn vị mình.
## 2. Ma trận vai trò × hành động
*Ô ghi: `✅` được · `❌` không · `🔶` được nhưng có điều kiện.*
🔴 **Ô `🔶` bắt buộc ghi điều kiện ngay trong ô.** `🔶` không điều kiện = chưa phân tích xong.
| Hành động | ROLE-01<br>Nhân viên | ROLE-02<br>Trưởng nhóm | ROLE-03<br>Kế toán | ROLE-04<br>Admin | BR |
|---|---|---|---|---|---|
| Xem danh sách | 🔶 chỉ cửa hàng phụ trách | ✅ | ✅ | ✅ | BR-030 |
| Xem chi tiết | 🔶 chỉ cửa hàng phụ trách | ✅ | ✅ | ✅ | |
| Tạo mới | ✅ | ✅ | ❌ | ✅ | |
| Sửa | 🔶 chỉ khi trạng thái Nháp | ✅ | ❌ | ✅ | BR-005 |
| Xoá | ❌ | 🔶 chỉ Nháp, cần lý do | ❌ | ✅ | BR-006 |
| Gửi duyệt | ✅ | ✅ | ❌ | ✅ | |
| Duyệt | ❌ | 🔶 không tự duyệt bản ghi mình tạo | ❌ | ❌ | **SoD-01** |
| Xuất dữ liệu | 🔶 cần nhập lý do | ✅ | ✅ | ✅ | BR-031 |
| Xem lịch sử thay đổi | ❌ | ✅ | ✅ | ✅ | |
**Kiểm tra chất lượng ma trận:** một cột toàn ✅ hoặc một hàng toàn ✅ ⇒ chưa phân tích.
Luôn hỏi ngược *"vai trò nào KHÔNG được làm việc này?"* — câu phủ định ép ra ranh giới thật.
## 3. Separation of Duties (SoD)
*Bắt buộc với mọi hành động phê duyệt / chốt sổ / thanh toán / cấp quyền.*
| ID | Cặp hành động xung đột | Quy tắc | Hệ thống chặn thế nào | Ai giám sát |
|---|---|---|---|---|
| SoD-01 | Tạo ↔ Duyệt | Người tạo không được duyệt bản ghi của chính mình | Ẩn nút Duyệt khi `createdBy = currentUser` | Kiểm toán nội bộ |
| SoD-02 | Duyệt ↔ Chi tiền | | | |
**Ngoại lệ SoD** — nếu tổ chức quá nhỏ để tách vai:
| Ngoại lệ | Điều kiện | Bù đắp bằng | Ai phê chuẩn ngoại lệ |
|---|---|---|---|
| | *(vd: chi nhánh <3 người)* | Log + báo cáo hằng tháng cho trưởng phòng | |
Không có SoD trong nghiệp vụ tài chính là **phát hiện của kiểm toán**, không phải chi tiết nhỏ.
## 4. Dữ liệu nhạy cảm
| Trường/dữ liệu | Loại | Ai được xem | Che thế nào | Xuất được không | Lưu bao lâu | Căn cứ |
|---|---|---|---|---|---|---|
| Số CMND/CCCD | PII | ROLE-03, ROLE-04 | Che 6 số giữa | 🔶 cần lý do | 5 năm | |
| Số tài khoản | PII tài chính | ROLE-03 | Che 4 số cuối | ❌ | | |
## 5. Lưu vết (audit)
| Hành động | Ghi vết | Nội dung ghi | Giữ bao lâu | Ai xem được |
|---|---|---|---|---|
| Sửa bản ghi | ✅ | ai · lúc nào · trường nào · trước→sau | 2 năm | ROLE-02+ |
| Duyệt | ✅ | ai · lúc nào · ghi chú | 5 năm | ROLE-02+ |
| Xuất dữ liệu | ✅ | ai · lúc nào · **lý do** · số bản ghi | 5 năm | ROLE-04 |
| Đăng nhập thất bại | ✅ | | | |
Ba câu hỏi cho mỗi hành động nhạy cảm — trả lời đủ mới coi là phân tích xong:
1. Ai được **xem** dữ liệu này? Có phải thông tin cá nhân không?
2. Có cần **lưu vết** không? Lưu bao lâu?
3. Có cần **nhập lý do** khi thực hiện không?
## 6. Hành vi khi không đủ quyền
*Quy tắc W7 — ba trạng thái khác nhau, phải chọn rõ cho từng trường hợp.*
| Tình huống | Hành vi | Lý do |
|---|---|---|
| Không có quyền xem màn hình | Không hiện trong menu + chặn ở route | Tránh lộ sự tồn tại của chức năng |
| Có quyền xem, không có quyền sửa | Hiện, ở chế độ read-only | Vẫn cần tra cứu |
| Có quyền nhưng sai trạng thái | Hiện nút, **disable**, có tooltip nêu lý do | Người dùng cần biết vì sao không bấm được |
| Gọi thẳng API không đủ quyền | Trả 403 + ghi log | Chặn ở cả FE và BE |
🔴 Chặn ở giao diện là trải nghiệm, **chặn ở backend mới là bảo mật**. Ghi rõ cả hai.
## 7. Thay đổi so với phân quyền hiện tại
*Chỉ dùng khi làm enhancement.*
| Vai trò | Quyền cũ | Quyền mới | Ai bị mất quyền | Đã thông báo chưa |
|---|---|---|---|---|
Mất quyền mà không báo trước là sự cố vận hành ngày go-live.
## 8. Open Questions
| ID | Câu hỏi | Hỏi ai | Từ ngày | Chặn gì |
|---|---|---|---|---|