Vai trò quản lý trong ứng dụng rails với pundit đá quý

Tram Ho

Khi bạn xây dựng một ứng dụng rails với nhiều vai trò của người dùng, tôi nghĩ tại thời điểm này, điều bạn lo lắng nhất là phân cấp người dùng của bạn. Bây giờ bạn có rất nhiều giải pháp để giải quyết vấn đề này. Nhưng bây giờ trong bài viết này tôi sẽ cho bạn thấy một gem pundit để quản lý vai trò người dùng.

Pundit là gì?

Gem pundit là một thư viện giúp xây dựng một hệ thống để giới hạn tài nguyên của người dùng được ủy quyền. Nếu bạn cần giới hạn các quyền truy cập đối với một số người dùng nhất định, vai trò tách biệt cho người dùng trong ứng dụng của bạn sẽ xuất hiện. Vì vậy, bạn có thể sử dụng Pundit để quản lý vấn đề đó. Pundit giúp chúng tôi xác định chính sách là PORC.

Chúng tôi vẫn sẽ cần xác định vai trò của người dùng của chúng tôi. Nhưng bây giờ lợi thế của chúng tôi là giảm thiểu cho các bộ điều khiển và mô hình. Chính sách sẽ xử lý phần phức tạp nhất cho mô hình / bộ điều khiển là cho phép truy cập vào một trang cụ thể.

Cách bạn làm việc với Pundit

Bước 1: Bạn tạo một lớp Chính sách liên quan đến việc cho phép truy cập vào một loại bản ghi cụ thể.

Bước 2: Bạn gọi hàm ủy quyền tích hợp, chuyển qua những gì bạn đang cố gắng ủy quyền truy cập.

Bước 3: Pundit sẽ tìm lớp Chính sách phù hợp và gọi phương thức Chính sách khớp với tên của phương thức bạn đang ủy quyền. Nếu nó trả về đúng, bạn có quyền thực hiện hành động. Nếu không, nó sẽ ném một ngoại lệ.

Thiết lập Pundit

Tôi nghĩ rằng nó là dễ dàng để thiết lập đá quý này. Để được hướng dẫn rõ ràng, bạn có thể kiểm tra tài liệu của Gem. Bây giờ bắt đầu thiết lập nó:

  • Thêm gem "pundit" vào Gemfle
  • Thêm Include Pundit vào application controller
  • Chạy bundle install
  • rails g pundit:install sẽ tạo và thiết lập chính sách mặc định cho ứng dụng của bạn và được xác định tại ứng dụng / chính sách đường dẫn.

Bây giờ bạn có thể kiểm tra ví dụ application_controller.rb như dưới đây:

Bây giờ bạn thấy tệp mặc định của Pundit là application_policy.rb như sau:

Đối với mã ở trên, bạn có thể thấy:

  • Xác minh đầu tiên là user và trong pundit bộ điều khiển sẽ được thông qua current_user
  • Xác minh thứ hai là mô hình mà chúng ta cần phải ủy quyền. Chính sách trong pundit và bộ điều khiển sẽ có cùng chức năng để kiểm tra chính sách trong chức năng đó.

Ví dụ: trong users_controller.rb của bạn:


Sau đó, trong user_policy.rb sẽ có các hàm tương ứng như sau:
Chia sẻ bài viết ngay

Nguồn bài viết : Viblo