Quyền
Mỗi quyền trong XBuddy là một chuỗi phẳng dạng resource:action — một năng lực (capability), ví dụ invoices:write, leads:read, payroll:approve. Vai trò chứa các năng lực này; người dùng có chúng bằng cách giữ vai trò.
Các động từ hành động chuẩn
Động từ hành động được chuẩn hóa toàn nền tảng:
| Động từ | Ý nghĩa |
|---|---|
read | Xem danh sách và chi tiết |
write | Tạo và sửa |
delete | Xóa hoặc lưu trữ |
approve | Phê duyệt trong luồng maker-checker |
manage | Cấu hình cài đặt riêng của tài nguyên |
export | Xuất dữ liệu ra khỏi XBuddy |
use | Dùng tính năng không phải CRUD (ví dụ ai:use, pos:use) |
monitor / review | Giám sát hoặc xét duyệt (gợi ý AI, agent) |
Phạm vi (own/team/all) không mã hóa trong tên quyền — quyền áp dụng lên bản ghi nào là một cài đặt riêng. Xem Phạm vi dữ liệu.
Quyền chặn sản phẩm như thế nào
Cùng một năng lực được thực thi ở mọi tầng:
- Menu & điều hướng — app và mục menu người dùng thiếu quyền sẽ bị ẩn khỏi sidebar của họ.
- Trang & nút bấm — các nút hành động (Tạo, Duyệt, Xóa, Xuất…) chỉ hiện khi người dùng giữ đúng quyền.
- Máy chủ (ranh giới thật) — mọi yêu cầu API được kiểm tra lại trên máy chủ. Ẩn nút chỉ là tiện lợi; kiểm tra phía máy chủ mới là bảo đảm an toàn. Phản hồi không bao giờ chứa dữ liệu người dùng không được xem.
Nguyên tắc từ-chối-mặc-định áp dụng xuyên suốt: nếu không vai trò nào của người dùng cấp năng lực đó, hành động bị từ chối.
Maker-checker: người tạo ≠ người duyệt
Với chứng từ tài chính và pháp lý (hóa đơn, hóa đơn mua, thanh toán, hợp đồng…), approve cố ý là một động từ tách riêng khỏi write. Điều này cho phép phân tách nhiệm vụ: người tạo chứng từ không nên là người duyệt nó. XBuddy thực thi điều này trong luồng phê duyệt — người duyệt không thể duyệt chính đề xuất của mình.
Hãy cấp approve một cách dè dặt, và cho những người khác với người nhập liệu. Kết hợp với nhật ký kiểm toán, đây là chốt kiểm soát nội bộ chính của bạn trên chứng từ tài chính.
Các quyền nhạy cảm cần lưu ý
export— cho phép dữ liệu rời khỏi XBuddy; chỉ cấp nơi thực sự cần.delete— tách khỏiwritevì rủi ro cao; đa số vai trò hằng ngày không cần.manage— quyền cấu hình một tài nguyên, cao hơnwritethông thường.- Vai trò
admin(*) — mọi quyền; chỉ dành cho một hai quản trị viên tin cậy.
Đọc một chuỗi quyền
Chuỗi quyền luôn có dạng tài_nguyên:động_từ, ví dụ:
| Chuỗi quyền | Đọc là |
|---|---|
invoices:write | Tạo và sửa hóa đơn |
invoices:approve | Phê duyệt hóa đơn (maker-checker, tách khỏi write) |
payroll:approve | Duyệt kỳ lương trước khi chạy |
crm:admin | Cấu hình toàn bộ ứng dụng CRM (App-Admin) |
ai:use | Dùng AI Copilot và các tính năng AI không phải CRUD |
agents:monitor | Xem nhật ký chạy của AI Agents nhưng không cấu hình được chúng |
Một số tài nguyên dùng chung một tiền tố cho nhiều màn hình liên quan — ví dụ deals:read áp dụng cho cả danh sách deal, bảng Kanban pipeline, và trang chi tiết deal; không có quyền deals:read_list riêng với deals:read_detail riêng.
Quyền không tự động kèm module hoặc phạm vi
Ba khái niệm dễ nhầm lẫn nhưng hoàn toàn độc lập:
- Có quyền
invoices:writekhông có nghĩa tenant đã mua Gói Tài chính (đó là trục Module) — người dùng có quyền vẫn thấy lỗi nếu module chưa được cấp phép. - Có quyền
invoices:writekhông có nghĩa nhìn thấy mọi hóa đơn (đó là trục Phạm vi dữ liệu) — quyền chỉ mở khóa hành động, phạm vi mới quyết định trên bản ghi nào. - Có quyền
invoices:writekhông có nghĩa app Tài chính hiện trong App Switcher của người đó nếu admin đã giới hạn bằng bộ lọc app-access.
Câu hỏi thường gặp
Vì sao không có quyền invoices:create riêng với invoices:update?
Vì gần như mọi vai trò cần cả hai cùng lúc trong thực tế — tách chúng chỉ tạo thêm việc quản trị mà không tăng an toàn. Chỉ những động từ có rủi ro/luồng phê duyệt khác biệt thật sự (delete, approve, export) mới được tách riêng.
Một quyền có áp dụng cho cả web lẫn mobile không? Có — quyền là một khái niệm ở tầng máy chủ, dùng chung cho mọi kênh truy cập (web, app di động, API). Loại tài khoản (Web/Mobile/Cả hai — xem Người dùng) chỉ quyết định kênh nào họ đăng nhập được, không thay đổi quyền họ có trên kênh đó.
Làm sao biết một quyền cụ thể có tồn tại không trước khi cấp cho vai trò tùy chỉnh? Ma trận quyền trong Cài đặt → Vai trò chỉ hiển thị các quyền có thật, nhóm theo tài nguyên/module — bạn không cần nhớ tên chuỗi, chỉ cần tích chọn từ danh sách.