113 lines
5.1 KiB
Markdown
113 lines
5.1 KiB
Markdown
# 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ì |
|
||
|---|---|---|---|---|
|