Tiếng ViệtTổng Quan & Nền TảngNgười Dùng & Phân QuyềnPhân Quyền (Permissions)

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
readXem danh sách và chi tiết
writeTạo và sửa
deleteXóa hoặc lưu trữ
approvePhê duyệt trong luồng maker-checker
manageCấu hình cài đặt riêng của tài nguyên
exportXuất dữ liệu ra khỏi XBuddy
useDùng tính năng không phải CRUD (ví dụ ai:use, pos:use)
monitor / reviewGiá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ỏi write vì 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ơn write thô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:writeTạo và sửa hóa đơn
invoices:approvePhê duyệt hóa đơn (maker-checker, tách khỏi write)
payroll:approveDuyệt kỳ lương trước khi chạy
crm:adminCấu hình toàn bộ ứng dụng CRM (App-Admin)
ai:useDùng AI Copilot và các tính năng AI không phải CRUD
agents:monitorXem 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:write khô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:write khô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:write khô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.