init git
This commit is contained in:
112
.claude/skills/ba-2-analysis/templates/rbac-matrix.md
Normal file
112
.claude/skills/ba-2-analysis/templates/rbac-matrix.md
Normal 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ì |
|
||||
|---|---|---|---|---|
|
||||
Reference in New Issue
Block a user