paint-brush
Cách tôi triển khai phê duyệt quyền truy cập trong dự án nguồn mở của chúng tôitừ tác giả@hacker6428749
2,868 lượt đọc
2,868 lượt đọc

Cách tôi triển khai phê duyệt quyền truy cập trong dự án nguồn mở của chúng tôi

từ tác giả 9m2024/07/25
Read on Terminal Reader

dài quá đọc không nổi

Makaut Buddy, một nền tảng chia sẻ ghi chú dành cho sinh viên đại học, đã phải đối mặt với những thách thức trong việc quản lý nội dung tải lên của người dùng một cách an toàn. Bài viết này giải thích cách triển khai Kiểm soát truy cập dựa trên vai trò (RBAC) bằng Permit.io đã giải quyết được vấn đề, đảm bảo chỉ những người dùng được ủy quyền mới có thể tải lên nội dung, từ đó tăng cường tính bảo mật của nền tảng.
featured image - Cách tôi triển khai phê duyệt quyền truy cập trong dự án nguồn mở của chúng tôi
undefined HackerNoon profile picture
0-item
1-item


Vài ngày trước, một số đồng nghiệp của tôi đã tiếp cận tôi về một vấn đề với ứng dụng Nguồn mở có tên Makaut Buddy , một nền tảng chia sẻ ghi chú được thiết kế cho trường đại học của chúng tôi, nhằm giúp sinh viên chia sẻ các ghi chú hàng đầu, câu hỏi thi trước đây và hướng dẫn trên YouTube một cách hiệu quả .


Mặc dù họ đã phát triển thành công hệ thống tải tài nguyên lên nhưng họ gặp phải thách thức trong việc đảm bảo rằng chỉ những cá nhân được ủy quyền mới có thể tải nội dung lên.


Như được hiển thị trong bản demo bên dưới, bất kỳ người dùng nào cũng có thể tạo tài nguyên sau khi đăng ký. Điều này đặt ra một vấn đề lớn vì chúng tôi không thể quản lý những gì người dùng tải lên, một số thậm chí có thể đã tải lên nội dung có hại hoặc gây khó chịu.

Ban đầu, họ xác định vai trò Quản trị viên và cấp cho một nhóm cá nhân được chọn các đặc quyền quản trị. Tuy nhiên, khi số lượng vai trò tăng lên, mã ngày càng trở nên phức tạp và khó quản lý.


Đây là lúc tôi nảy ra ý tưởng viết bài này để nâng cao nhận thức về các cách quản lý ủy quyền hiệu quả bằng mô hình Kiểm soát truy cập dựa trên vai trò (RBAC) với sự trợ giúp của các công cụ ủy quyền của bên thứ ba như Giấy phép.


Ngoài việc triển khai RBAC, chúng tôi cũng giới thiệu hệ thống Phê duyệt yêu cầu truy cập. Hệ thống này đảm bảo rằng bất kỳ người dùng nào muốn tải nội dung lên trước tiên đều phải yêu cầu quyền truy cập, sau đó quản trị viên có thể phê duyệt hoặc từ chối. Lớp bảo mật bổ sung này giúp chúng tôi duy trì tính toàn vẹn của nội dung trên Makaut Buddy.


Trong bài viết này, tôi đã sử dụng JavaScript làm ngôn ngữ lập trình và Next.js làm khung. Tuy nhiên, các khái niệm được thảo luận ở đây không dành riêng cho ngôn ngữ và bạn có thể triển khai chúng bằng ngôn ngữ lập trình ưa thích của mình.


Đến cuối bài viết này, bạn sẽ biết cách triển khai mô hình RBAC cơ bản trong ứng dụng của mình.


Như đã nói, hãy đi sâu vào!


Ủy quyền là gì?

Bạn có nhớ những buổi sáng vội vã đến trường không? Nhân viên bảo vệ kiểm tra ID của bạn là một ví dụ hoàn hảo về xác thực. Họ đang xác minh danh tính của bạn với tư cách là sinh viên được phép vào trường. Nhưng đó chỉ là bước đầu tiên. Ngay cả sau khi được xác định, bạn sẽ không bước vào bất kỳ lớp học nào, phải không? Đó là nơi ủy quyền xuất hiện.


Hãy coi lịch học như sự ủy quyền của bạn. Nó cấp cho bạn quyền truy cập vào các khu vực cụ thể (lớp học) dựa trên vai trò của bạn (học sinh đăng ký vào lớp đó). Bạn sẽ không được phép vào phòng chờ của giáo viên hoặc khu vực hạn chế của thư viện - ngay cả khi bạn là sinh viên (đã được xác thực).


Sự khác biệt giữa Xác thực và Ủy quyền giống như hỏi "Bạn là ai?" vs “Bạn được phép làm gì?”

Tại sao chúng ta cần mô hình RBAC để ủy quyền 🤔?

Việc ủy quyền rất quan trọng trong mọi tổ chức vì nó ngăn cản các cá nhân thực hiện những hành động mà họ không được phép thực hiện. Điều này đảm bảo sự an toàn của tổ chức và giúp ngăn ngừa tổn thất.


Hãy minh họa tuyên bố trên bằng một ví dụ:

Trong một công ty, có một số kỹ sư cấp cao có kinh nghiệm sâu sắc và một số thực tập sinh vẫn đang học hỏi. Bạn có thể tưởng tượng thảm họa sẽ xảy ra nếu cả kỹ sư cấp cao và thực tập sinh đều có cùng cấp độ quyền. Các thực tập sinh đang trong quá trình học tập có thể vô tình mắc phải sai lầm nào đó mà công ty sẽ phải trả giá. Trong những tình huống như thế này, Mô hình kiểm soát truy cập dựa trên vai trò hoạt động tốt nhất vì các quyền không được chỉ định cho các cá nhân thay vào đó các quyền được chỉ định cho các vai trò. Ví dụ: chỉ kỹ sư cấp cao hoặc trưởng nhóm công nghệ mới có thể Xóa Tài nguyên trong khi tất cả thực tập sinh chỉ có thể xem và quản lý tài nguyên.


Tiếp theo, hãy xem cách chúng ta có thể triển khai RBAC trong một ứng dụng.

Cách triển khai RBAC trong ứng dụng:

1. Xác định vai trò và quyền

Đầu tiên chúng ta cần xác định vai trò và gán quyền cho từng vai trò.

Lưu ý: Vai trò là vị trí hoặc mục đích mà ai đó có trong tổ chức, chúng tôi cần các vai trò để có thể phân biệt giữa các cá nhân dựa trên các quyền hoặc đặc quyền được gán cho vai trò đó.

2. Gán vai trò cho người dùng

Chúng ta cần một cách để gán vai trò cho từng người dùng ứng dụng. Điều này thường được thực hiện sau khi người dùng đăng ký.

3. Tạo API ủy quyền

Chúng tôi cần một API trong phần phụ trợ của mình để thực hiện thao tác mà người dùng muốn thực hiện và kiểm tra quyền của người dùng. Sơ đồ dưới đây sẽ giúp bạn hiểu rõ hơn:



Tuy nhiên, chúng tôi sẽ không triển khai toàn bộ mô hình từ đầu. Thay vào đó, chúng tôi sẽ sử dụng công cụ ủy quyền của bên thứ ba có tên là Permit. Công cụ này sẽ giúp toàn bộ quá trình thiết lập ủy quyền trở nên trơn tru và hiệu quả đối với chúng tôi, để bạn có thể làm việc trên các tính năng thực sự quan trọng.


Sơ đồ bên dưới cho bạn thấy cách chúng tôi sẽ tận dụng Giấy phép để triển khai RBAC trong các ứng dụng của mình:


Triển khai mô hình RBAC

Trong phần này, chúng tôi sẽ hướng dẫn các bước để triển khai Kiểm soát truy cập dựa trên vai trò (RBAC) bằng Giấy phép.


Bước 1: Tạo tài khoản giấy phép và không gian làm việc

Vì chúng tôi đang sử dụng Giấy phép để thiết lập mô hình RBAC, trước tiên chúng tôi cần tạo tài khoản Giấy phép và không gian làm việc:


Bước 2: Tạo tài nguyên

Bây giờ chúng ta cần tạo Tài nguyên là thực thể mà chúng ta muốn kiểm soát quyền truy cập trong ứng dụng của mình.

Ví dụ: trong một ứng dụng ghi chú, tài nguyên sẽ là Ghi chú và các hành động có thể là Tạo , Đọc, Cập nhậtXóa.


Để tạo một tài nguyên:

  1. Vào phần Chính sách.
  2. Điều hướng đến tab Tài nguyên.
  3. Tạo một tài nguyên mới bằng cách điền vào các chi tiết cần thiết.



Trong ví dụ trên, tên Tài nguyên là Ghi chú và các hành động mà người dùng được phép thực hiện là Tạo, Đọc, Cập nhật và Xóa.

Bước 3: Xác định vai trò

Sau khi tạo Tài nguyên, chúng ta phải xác định các vai trò sẽ tồn tại trong ứng dụng của mình.


Trong trường hợp này, vì ứng dụng này là một ứng dụng chia sẻ ghi chú của một trường đại học nên các vai trò sẽ là:

  • Quản trị viên: có thể tạo và đọc tài nguyên.
  • Học sinh: có thể đọc tài liệu.




Bước 4: Gán hành động cho vai trò

Khi chúng tôi đã tạo cả hai vai trò, bây giờ chúng tôi phải chỉ định các hành động mà mỗi vai trò có thể thực hiện từ trình chỉnh sửa chính sách của mình, như hiển thị bên dưới:


Bước 5: Định cấu hình API phụ trợ

Bây giờ tài khoản Permit của bạn đã được định cấu hình, bạn có thể bắt đầu tạo các API phụ trợ để liên lạc với Permit. Chúng tôi sẽ sử dụng SDK Node.js do Permit cung cấp. Bạn có thể tìm thấy SDK cho ngôn ngữ lập trình ưa thích của mình trong Tài liệu cấp phép.


Đồng bộ hóa người dùng và chỉ định vai trò mặc định

Trước tiên, chúng tôi cần đảm bảo rằng mỗi người dùng đăng ký trong ứng dụng của chúng tôi đều được đồng bộ hóa với thư mục giấy phép và được gán vai trò mặc định là Sinh viên.


Để làm điều này, chúng ta cần tạo API phụ trợ như dưới đây:

API này thực hiện 2 việc:

  • Khởi tạo API giấy phép.
  • Tạo người dùng mới bằng API createUser .
  • Gán vai trò mặc định bằng cách sử dụng API assignRole .



Bạn có thể đọc thêm về tất cả các API mà Permit cung cấp tại tài liệu giấy phép


Nhận vai trò người dùng

Tiếp theo, chúng ta cần tạo một API phụ trợ nhận vai trò của người dùng từ Permit.io và gửi nó trở lại giao diện người dùng.

API hiển thị bên dưới giúp người dùng sử dụng permit.api.users.get(user_key)



API này nhận vai trò người dùng mà chúng tôi có thể thao tác các thành phần giao diện người dùng của mình để chỉ cho phép những người có vai trò đặc biệt mới có thể nhìn thấy nó.


Bạn cũng có thể kiểm tra hàm allow.check() để xác minh xem người dùng có vai trò nhất định có được phép thực hiện một thao tác hay không.

Với điều này, chúng tôi đã triển khai thành công mô hình RBAC bằng Permit. Giờ đây, chúng tôi có thể tích hợp các tuyến phụ trợ với khung giao diện người dùng hoặc thư viện mà bạn chọn để hoàn tất quá trình thiết lập.

Triển khai hệ thống phê duyệt quyền truy cập:

Để hoàn tất quá trình thiết lập, chúng tôi cần một thành phần cho phép người dùng yêu cầu nâng cấp vai trò:

  • Người dùng bình thường không có đặc quyền quản trị viên có thể xem thành phần giấy phép và yêu cầu đặc quyền quản trị viên.



  • Người dùng quản trị có thể phê duyệt hoặc từ chối các yêu cầu nâng cấp vai trò đến từ những người dùng khác.


Bước 1: Tạo phần tử giấy phép

Các thành phần giấy phép là một phần của “Permit Share-If”, là một bộ gồm các thành phần giao diện người dùng có thể nhúng, dựng sẵn giúp việc chia sẻ quyền truy cập trong các ứng dụng trở nên dễ dàng. Được thiết kế để cung cấp khả năng kiểm soát truy cập đầy đủ chức năng, chúng giúp việc quản lý quyền ủy quyền cho người dùng của bạn trở nên đơn giản và an toàn.


  • Để thực hiện điều này, trước tiên, chúng ta cần tạo một phần tử giấy phép:
    • Chuyển đến tab Thành phần trong Bảng điều khiển giấy phép.
    • Nhấp vào Tạo phần tử trong phần Quản lý người dùng.



  • Sau đó chúng ta phải điền vào biểu mẫu những thông tin được yêu cầu như hình dưới đây
    • Đặt vai trò Quản trị viên làm chủ sở hữu không gian làm việc.
    • Gán vai trò Sinh viên cho phần người xem.
    • Đặt vai trò mặc định là Sinh viên.



  • Lưu phần tử và tạo phần tử mới trong Yêu cầu truy cập.:


  • Sau đó điền thông tin để yêu cầu truy cập
    • Chọn Thành phần quản lý người dùng để kết nối thành phần yêu cầu truy cập của bạn.
    • Bấm vào Tạo để hoàn thiện phần tử.



  • Tiếp theo, chúng ta sẽ chỉnh sửa Phần tử quản lý người dùng
    • Quay lại Phần tử quản lý người dùng và chỉnh sửa nó.
    • Chọn thành phần yêu cầu truy cập làm thành phần phê duyệt trong quản lý người dùng.



Thế là chúng ta đã tạo xong các phần tử.

Bước 2: Tạo API phụ trợ để đăng nhập người dùng

Trước khi sử dụng các phần tử, chúng ta cần tạo API phụ trợ để đăng nhập người dùng vào phần tử giấy phép,

Lưu ý: Điều quan trọng là người dùng phải đăng nhập càng sớm càng tốt, tốt nhất là ngay sau khi đăng ký.


Bây giờ, hãy xem mã:

Mã API phục vụ tại điểm cuối /api/v1/login_permit/?userkey=user_key :



Bước 3: Mã giao diện người dùng để thực hiện đăng nhập

Mã giao diện người dùng để triển khai đăng nhập sẽ trông như thế này:



Thế là chúng ta đã thiết lập xong mã của mình.

Bước 4: Tích hợp Iframe vào Frontend

Bây giờ, chúng ta chỉ cần đi tới bảng điều khiển giấy phép và sao chép cả iframe quản lý người dùng và iframe yêu cầu truy cập, như hiển thị bên dưới:



Bây giờ, khi đã có mã, chúng ta cần thêm iframe vào giao diện người dùng nơi chúng ta muốn hiển thị các thành phần cho người dùng, chúng ta cần:

  • Hiển thị thành phần quản lý người dùng cho người dùng có vai trò quản trị viên.
  • Hiển thị phần tử yêu cầu truy cập cho người dùng có vai trò sinh viên.


Với điều này, chúng tôi đã thiết lập thành công hệ thống phê duyệt quyền truy cập nơi người dùng có thể yêu cầu nâng cấp vai trò và quản trị viên có thể phê duyệt hoặc từ chối các yêu cầu này.


Bản demo RBAC trong ứng dụng chia sẻ ghi chú

  • Bản trình diễn: Quyền truy cập của quản trị viên vào tiện ích tải lên

Bản demo này cho thấy cách người dùng có vai trò "Quản trị viên" có thể truy cập tiện ích tải lên



  • Bản trình diễn: Hạn chế vai trò của sinh viên và yêu cầu truy cập

Bản demo này minh họa cách người dùng có vai trò "Sinh viên" không thể nhìn thấy tiện ích tải lên và có thể yêu cầu nâng cấp lên vai trò "Quản trị viên":


  • Demo: Phê duyệt nâng cấp vai trò

Bản demo này cho thấy cách người dùng có đặc quyền có thể phê duyệt yêu cầu nâng cấp vai trò:


  • Bản trình diễn: Quyền truy cập vai trò được nâng cấp để tải lên tiện ích

Bản demo này minh họa cách người dùng sau khi được nâng cấp từ "Sinh viên" lên "Quản trị viên" có quyền truy cập vào tiện ích tải lên

Phần kết luận

Đó là nó!


Cảm ơn bạn đã đọc đến đây.


Trong hướng dẫn này, chúng ta đã khám phá ủy quyền và hiểu tại sao ủy quyền lại rất quan trọng trong bất kỳ ứng dụng nào. Chúng tôi cũng đã xem xét cách có thể thiết lập và định cấu hình Giấy phép để bảo mật ứng dụng và kiểm soát quyền truy cập của người dùng dựa trên vai trò của họ.


Bài viết này chỉ là phần nổi của tảng băng chìm về ủy quyền và mô hình RBAC. Bạn có thể xem xét ABAC và ReBAC để có được Ủy quyền chi tiết hơn.