# RBAC — Ma trận phân quyền — | | | |---|---| | **Version** | 1.0 | | **Date** | YYYY-MM-DD | | **Author** | (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
Nhân viên | ROLE-02
Trưởng nhóm | ROLE-03
Kế toán | ROLE-04
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ì | |---|---|---|---|---|