Xác Thực & Ủy Quyền
Quyết định
Phần tiêu đề “Quyết định”Permission-code RBAC với định nghĩa vai trò theo từng tenant.
Nền tảng định nghĩa một catalog cố định của các mã quyền có tên. Quản trị viên tenant định nghĩa các vai trò và gán các mã quyền cho chúng. Người dùng được gán các vai trò trong tenant của họ. Session token được cấp tại đăng nhập mang các mã quyền đã resolve, cho phép các quyết định ủy quyền mà không cần tra cứu database ở mỗi request. Cô lập dữ liệu tenant được thực thi độc lập tại lớp database.
Các Actor
Phần tiêu đề “Các Actor”| Actor | Mô tả |
|---|---|
| Quản trị viên Hệ thống | Người vận hành nền tảng. Quản lý tenant, thanh toán, cấu hình nền tảng. Không thuộc phạm vi bất kỳ tenant nào. Xác thực riêng qua đường dẫn riêng. |
| Quản trị viên Tenant | Người dùng quyền lực trong một tenant. Quản lý người dùng, vai trò và cấu hình tenant. |
| Người dùng Tenant | Bất kỳ người dùng nào hoạt động trong một tenant. Có một hoặc nhiều vai trò được định nghĩa bởi tenant. |
Quản trị viên Hệ thống không thể truy cập dữ liệu tenant thông qua API ứng dụng bình thường.
Xác Thực
Phần tiêu đề “Xác Thực”Người dùng xác thực và nhận session token (cookie cho browser clients, bearer token cho API/mobile clients) chứa resolved permission codes của họ. Cả hai transports thực thi các chính sách quyền giống nhau — logic ủy quyền không phân nhánh trên cách người dùng xác thực.
Tại sao permissions trong token thay vì roles: Tên vai trò được định nghĩa bởi tenant và có thể xung đột giữa các tenant. Mã quyền ổn định và được định nghĩa bởi nền tảng, làm cho chúng an toàn để mang trong token và kiểm tra mà không cần round-trip database.
Phiên browser sử dụng cookie được quản lý bảo mật bởi server. Token không được lưu trong bộ nhớ truy cập được bằng JavaScript phía client.
Thực Thi
Phần tiêu đề “Thực Thi”- Lớp API: Mọi endpoint thay đổi dữ liệu, hoặc trả về dữ liệu nhạy cảm, phải được bảo vệ bởi yêu cầu quyền được khai báo. Các endpoint thay đổi không được bảo vệ là lỗ hổng bảo mật.
- Lớp dữ liệu: Cô lập row ở cấp database thực thi ranh giới tenant độc lập với lớp ứng dụng.
- Request pipeline: Trên mọi request — xác thực session, thiết lập tenant scope trên kết nối database, cung cấp identity tenant hiện tại cho ứng dụng. Không có handler nào suy ra tenant identity từ input do người dùng cung cấp.
Nguyên Tắc Quan Trọng
Phần tiêu đề “Nguyên Tắc Quan Trọng”- Tenant identity đến từ authenticated session duy nhất — không bao giờ từ request input.
- Mã quyền phải tồn tại trong catalog nền trước khi có thể được gán cho vai trò. Không tạo mã không có trong catalog.
- Mọi thay đổi được bảo vệ bởi quyền phải tạo một mục nhật ký kiểm toán: ai, cái gì, khi nào và với quyền nào.
- Nhật ký kiểm toán chỉ thêm. Không đường dẫn ứng dụng nào được phép sửa đổi hoặc xóa các mục nhật ký kiểm toán.
- Thao tác admin nền tảng (cross-tenant) chạy qua đường dẫn truy cập đặc quyền riêng không bao giờ được exposed đến các API handler phục vụ tenant.
Vấn Đề Còn Mở
Phần tiêu đề “Vấn Đề Còn Mở”- Quyền cấp trường — ẩn các trường cụ thể (ví dụ: giá vốn khỏi nhân viên bán hàng) được hoãn đến Giai đoạn 2.
- Ủy quyền phê duyệt — ủy quyền tạm thời quyền phê duyệt (ví dụ: trong kỳ nghỉ) sẽ được xử lý với workflow engine (Giai đoạn 2).
- Người dùng đa tenant — người dùng thuộc về nhiều tenant được hỗ trợ bởi mô hình dữ liệu; UX để chuyển đổi tenant context cần thiết kế.