Link to original video by Web Dev Simplified
How To Handle Permissions Like A Senior Dev

Tóm tắt ngắn:
- Video giới thiệu về các hệ thống quản lý quyền truy cập (permission systems) trong phát triển web, chỉ ra nhược điểm của phương pháp dựa trên vai trò (role-based) đơn giản và trình bày các phương pháp phức tạp hơn.
- Các điểm chính bao gồm: so sánh hệ thống dựa trên vai trò, hệ thống kiểm soát truy cập dựa trên vai trò (RBAC), hệ thống dựa trên thuộc tính (ABAC), tích hợp với Clerk (một dịch vụ xác thực), và minh họa bằng code và sơ đồ. Các công nghệ được đề cập đến gồm Clerk, Next.js, và TypeScript.
- Ứng dụng của các hệ thống này bao gồm việc xây dựng các ứng dụng quản lý nội dung phức tạp, ứng dụng đa người dùng, và các ứng dụng cần kiểm soát truy cập tinh vi như Google Drive.
- Video hướng dẫn chi tiết các quá trình thiết kế và triển khai các hệ thống quản lý quyền truy cập khác nhau, từ đơn giản đến phức tạp.
Tóm tắt chi tiết:
Video được chia thành các phần chính sau:
Phần 1: Nhược điểm của hệ thống dựa trên vai trò đơn giản:
- Phần này chỉ ra sự bất tiện và khó bảo trì của việc sử dụng nhiều câu lệnh
if
lồng nhau để kiểm tra quyền truy cập dựa trên vai trò người dùng. Ví dụ được đưa ra là việc quản lý quyền xóa bình luận, với các vai trò Admin, Moderator và User. Việc thêm hoặc sửa đổi quyền đòi hỏi phải thay đổi nhiều chỗ trong code. - "Nếu bạn đang làm quản lý quyền như thế này, nơi bạn kiểm tra vai trò của người dùng, thì bạn đang làm sai." Đây là câu mở đầu nhấn mạnh vấn đề.
Phần 2: Hệ thống kiểm soát truy cập dựa trên vai trò (RBAC):
- Giải pháp này tập trung vào việc định nghĩa quyền (permission) thay vì chỉ dựa trên vai trò. Quyền được định nghĩa dưới dạng
action:resource
(ví dụ:delete:comments
). - Code ví dụ minh họa cách tạo một đối tượng cấu hình chứa tất cả các quyền cho từng vai trò. Hàm
hasPermission
được sử dụng để kiểm tra quyền truy cập. Việc thay đổi quyền chỉ cần sửa đổi trong một file cấu hình duy nhất. - Tuy nhiên, RBAC có hạn chế trong việc xử lý các điều kiện phức tạp dựa trên thuộc tính của đối tượng (ví dụ: người dùng chỉ được xóa bình luận của chính mình).
Phần 3: Tích hợp với Clerk:
- Phần này hướng dẫn cách tích hợp các hệ thống quản lý quyền truy cập với Clerk, một dịch vụ xác thực. Các bước bao gồm cài đặt package, sử dụng
Clerk Provider
, thiết lập webhook để cập nhật vai trò người dùng, và sử dụng middleware. - Minh họa cách truy xuất vai trò người dùng từ
session claims
của token JWT.
Phần 4: Sơ đồ và mô hình dữ liệu:
- Video trình bày các sơ đồ ER (Entity-Relationship) minh họa các mô hình dữ liệu khác nhau cho hệ thống quản lý quyền truy cập, từ đơn giản đến phức tạp, bao gồm cả việc xử lý nhiều vai trò cho một người dùng và quản lý tổ chức (organization).
- Sơ đồ cuối cùng thể hiện mô hình phức tạp hơn, cho phép chia sẻ quyền truy cập đến từng tài nguyên riêng lẻ (ví dụ: quyền chỉnh sửa, xem trên từng file trong Google Drive).
Phần 5: Hệ thống kiểm soát truy cập dựa trên thuộc tính (ABAC):
- ABAC là hệ thống linh hoạt nhất, cho phép kiểm tra quyền dựa trên nhiều thuộc tính của đối tượng (subject, action, resource, attributes).
- Code ví dụ minh họa cách sử dụng ABAC để kiểm tra quyền truy cập dựa trên nhiều điều kiện phức tạp, bao gồm trạng thái của đối tượng, người dùng bị chặn, và quyền được mời.
- "Đây là hệ thống mà nhiều công ty sẽ tính phí hàng nghìn đô la để sử dụng. Tôi sẽ chỉ cho bạn cách xây dựng nó hoàn toàn miễn phí."
Phần 6: Triển khai ABAC với Clerk:
- Phần này minh họa cách tích hợp ABAC với Clerk, sử dụng
session claims
để truy xuất thông tin người dùng và vai trò. Code ví dụ cho thấy cách sử dụng ABAC để kiểm tra quyền truy cập trên các đối tượngto-do
vàcomment
. - Video nhấn mạnh sự linh hoạt của ABAC trong việc xử lý các trường hợp phức tạp và tùy biến cao.
Tóm lại, video cung cấp một hướng dẫn toàn diện về các hệ thống quản lý quyền truy cập trong phát triển web, từ các phương pháp đơn giản đến phức tạp, với sự nhấn mạnh vào hệ thống ABAC và tích hợp với dịch vụ xác thực Clerk. Video sử dụng code ví dụ, sơ đồ và minh họa trực quan để giải thích các khái niệm và quá trình triển khai.