Giao diện
Phân quyền RBAC & Gói module
Kiểm soát ai được làm gì trong workspace, và bật/tắt module theo gói dịch vụ đã đăng ký. Route: /settings/team và /settings/modules.
Vai trò (Roles)
5 vai trò mặc định trong workspace — mỗi thành viên được gán một vai. Vai quyết định những gì họ thấy và làm được trong toàn hệ thống.
| Vai | Mô tả ngắn | Phù hợp cho |
|---|---|---|
| OWNER | Toàn quyền — cấu hình, thanh toán, xóa workspace | Chủ doanh nghiệp |
| ADMIN | Quản trị hệ thống, mời thành viên, unlock dữ liệu | Trưởng phòng IT / vận hành |
| OPS | Thao tác logistics: booking, container, trip, checklist | Nhân viên vận hành, dispatcher |
| SALES | CRM lead, báo giá — chỉ thấy data của mình | Nhân viên kinh doanh |
| ACCOUNTANT | Xem toàn bộ tài chính, approve thanh toán | Kế toán |
Một thành viên — một vai
Mỗi người chỉ có một vai tại một thời điểm. OWNER có thể thay đổi vai của bất kỳ thành viên nào ngoài chính mình.

Ma trận quyền
Tóm tắt quyền theo từng module — ✅ đầy đủ, 👁 chỉ xem, ❌ không truy cập.
| Module | OWNER/ADMIN | OPS | SALES | ACCOUNTANT |
|---|---|---|---|---|
| Booking / Container / Trip | ✅ | ✅ | ❌ | 👁 |
| Manifest & Load Plan | ✅ | ✅ | ❌ | ❌ |
| CRM Lead & Quote | ✅ | 👁 | ✅ (của mình) | 👁 |
| Rate Card | ✅ | 👁 | 👁 | ❌ |
| Debit Note / Invoice | ✅ | ✅ (tạo) | ❌ | ✅ |
| Công nợ AR/AP | ✅ | ❌ | ❌ | ✅ |
| Fleet & Fuel | ✅ | ✅ | ❌ | 👁 |
| Settings & RBAC | ✅ | ✅ (giới hạn) | ❌ | ❌ |
SALES chỉ thấy data của mình
SALES chỉ thấy CrmLead và Quote có ownerId = user.id. Muốn Sales thấy toàn bộ pipeline, cần nâng vai lên OPS hoặc ADMIN.
Gói module
Mỗi gói dịch vụ bao gồm một tập module. OWNER bật/tắt module trong /settings/modules — menu và tính năng tương ứng tự ẩn/hiện ngay lập tức.
| Module | Starter | Pro | Enterprise |
|---|---|---|---|
| Tờ khai hải quan + AI | ✅ | ✅ | ✅ |
| Logistics (Shipment/Booking/Container) | ✅ | ✅ | ✅ |
| Fleet & Fuel | ❌ | ✅ | ✅ |
| CRM + Rate Card + Quotes | ❌ | ✅ | ✅ |
| Load Plan 3D | ❌ | ✅ | ✅ |
| Tích hợp VietMap / ePort | ❌ | ✅ (add-on) | ✅ |
| Công nợ đa đối tác & P&L | ❌ | ✅ | ✅ |
| SLA Engine + Scorecard | ❌ | ✅ | ✅ |
| Multi-workspace | ❌ | ❌ | ✅ |
Tắt module không xóa dữ liệu
Khi tắt một module (ví dụ Fleet), dữ liệu xe/tài xế vẫn được giữ nguyên. Bật lại thì hiển thị đầy đủ trở lại. Chỉ OWNER mới có quyền bật/tắt module.

Thêm thành viên
Quy trình mời và quản lý thành viên:
Mời thành viên mới — Vào
/settings/team→ nút + Mời thành viên. Nhập email và chọn vai (Role). Hệ thống gửi email mời có link kích hoạt.Thành viên chấp nhận lời mời — Người được mời click link trong email → đăng nhập (hoặc đăng ký) → tự động join workspace với vai đã được gán.
Thay đổi vai — Trong danh sách thành viên → click tên → chọn vai mới từ dropdown. Thay đổi có hiệu lực ngay — phiên đăng nhập hiện tại của họ được cập nhật.
Vô hiệu hóa tài khoản — Click Vô hiệu hóa để ngừng truy cập ngay lập tức mà không xóa dữ liệu họ đã tạo. Có thể kích hoạt lại bất kỳ lúc nào.
Giới hạn số thành viên theo gói
Starter: tối đa 3 thành viên. Pro: tối đa 15. Enterprise: không giới hạn. Xem và nâng gói tại /settings/billing.
Chi tiết quyền từng role
Toàn quyền không giới hạn:
- Tất cả module: đọc, tạo, sửa, xóa
- Quản lý subscription, thanh toán, nâng cấp gói
- Xóa workspace (hành động không thể hoàn tác)
- Thêm/xóa/đổi vai thành viên bất kỳ
- Bật/tắt module
- Xem audit log đầy đủ
- Override SLA, trạng thái, phê duyệt đặc biệt
Workspace isolation — cross-workspace IDOR
Mọi query trong hệ thống đều bắt buộc filter theo workspaceId — một custom ESLint rule (require-workspace-filter) kiểm tra tại compile time. Điều này ngăn chặn:
- Người dùng workspace A xem dữ liệu workspace B
- API endpoint bị exploit để lấy data cross-tenant
- Query quên filter workspace trong code mới
ESLint enforced at build time
Nếu developer viết query không có workspaceId filter → build fail ngay. Đây là tuyến phòng thủ đầu tiên chống cross-workspace data leak.
Admin roles (internal — không phải workspace roles)
Ngoài 5 workspace roles ở trên, hệ thống có AdminRole riêng cho admin nội bộ TKHQ:
| AdminRole | Quyền |
|---|---|
| SUPER_ADMIN | Toàn quyền hệ thống |
| SUPPORT | Xem workspace của bất kỳ user |
| FINANCE | Xem billing, subscription, reconciliation |
| SALES | Xem CRM internal, không touch workspace user |
| COMPLIANCE | Xem audit log toàn hệ thống |
AdminRole chỉ áp dụng cho nhân viên TKHQ tại trang /admin — không liên quan đến workspace roles của người dùng.