Advertisement
  1. Code
  2. Laravel 5

Gates và Policies trong Laravel

by
Read Time:9 minsLanguages:

Vietnamese (Tiếng Việt) translation by Thai An (you can also view the original English article)

Hôm nay, chúng ta sẽ thảo luận về hệ thống xác thực của framework web Laravel. Framework Laravel triển khai xác thực dưới dạng gates và policies. Sau khi giới thiệu về các cổng và chính sách, tôi sẽ minh hoạ các khái niệm bằng cách triển khai một ví dụ tự xây dựng.

Tôi cho rằng bạn đã biết đến hệ thống xác thực tích hợp sẵn của Laravel đã được xây dựng vì đó là điều cần thiết để hiểu khái niệm ủy quyền. Rõ ràng, hệ thống xác thực hoạt động kết hợp với hệ thống xác thực để xác định phiên người dùng hợp pháp.

Nếu bạn không biết về hệ thống xác thực của Laravel, tôi khuyên bạn nên xem kỹ các tài liệu chính thức, cung cấp cho bạn sự am hiểu về chủ đề này.

Cách tiếp cận của Laravel đối với sự xác thực

Đến bây giờ, bạn nên biết rằng hệ thống xác thực của Laravel có hai phần chính - gates và policies. Mặc dù đó có vẻ phức tạp, nhưng tôi sẽ nói rằng nó khá dễ dàng để triển khai một khi bạn đã tập luyện thuần thục với nó!

Gates cho phép bạn xác định một quy tắc xác thực bằng cách sử dụng một cách tiếp cận dựa trên nền tảng cloud. Nói cách khác, khi bạn muốn xác thực cho một hành động không liên quan đến bất kỳ model cụ thể, gates là nơi hoàn hảo để triển khai logic đó.

Chúng ta hãy nhanh chóng xem xét xác thực trên cơ sở gate là như thế nào:

Đoạn mã phía trên định nghĩa luật xác thức update-post mà bạn có thể gọi từ bất kỳ đâu trong ứng dụng của bạn.

Mặt khác, bạn nên sử dụng policies khi nào bạn muốn tập hợp logic xác thực của một model bất kỳ. Ví dụ: giả sử bạn có model Post trong ứng dụng của mình và bạn muốn xác thực các hoạt động CRUD của model đó. Trong trường hợp này, đó là policy mà bạn cần khai triển.

Như bạn thấy, đó là một class policy khá đơn giản định nghĩa sự xác thực cho các hoạt động CRUD của model Post.

Vì vậy, đó là phần giới thiệu về gates và policies trong Laravel. Từ phần tiếp theo trở đi, chúng ta sẽ xem xét một minh hoạ thực tế cho từng yếu tố.

Gates

Trong phần này, chúng ta sẽ thấy một ví dụ thực tế để hiểu khái niệm gates.

Thông thường, bạn sẽ chỉ tìm kiếm phần cung cấp dịch vụ của Laravel khi bạn cần đăng ký một thành phần hoặc một dịch vụ. Tuân theo quy tắc đó, hãy tiếp tục và định nghĩa gate tùy biến của chúng tôi trong ứng dụng app/Providers/AuthServiceProvider.php như hiển thị trong đoạn mã sau đây.

Trong phương thức boot, chúng tôi đã định nghĩa gate tùy chỉnh của chúng tôi:

Trong khi định nghĩa một cổng, phải mất một closure trả về giá trị TRUE hoặc FALSE dựa trên logic xác thực đã được xác định trong định nghĩa của gate. Ngoài hàm closure, có những cách khác giúp bạn có thể định nghĩa gates.

Ví dụ, định nghĩa gate sau đây gọi hành động điều khiển thay vì gọi hàm closure.

Bây giờ, hãy tiếp tục và bổ sung một route mới tuỳ biến để chúng ta có thể xem xét một minh hoạ về cách xác thực dưa trên gate hoạt động ra sao. Trong routes/web.php, hãy thêm tuyến đường sau.

Hãy tạo một file controller tương tác app/Http/Controllers/PostController.php.

Trong hầu hết các trường hợp, bạn sẽ kết thúc bằng cách sử dụng phương thức allows hoặc denies của facade Gate để cấp phép cho một hành động cụ thể. Trong ví dụ ở trên, chúng tôi đã sử dụng phương thức allows để kiểm tra xem người dùng hiện tại có thể thực hiện tác vụ update-post hay không.

Những người dùng với đôi mắt tinh tường sẽ nhận thấy rằng chúng tôi truyền đối số thứ hai $post đến closure. Đối số đầu tiên, người dùng đăng nhập hiện tại, được tự động chèn vào bởi facade Gate.

Vì vậy, đó là cách bạn được yêu cầu sử dụng các gates để xác thực các hoạt động trong ứng dụng Laravel của bạn. Phần tiếp theo nói về tất cả cách sử dụng policy nếu bạn muốn thực hiện xác thực cho model của mình.

Policies

Như chúng tôi đã thảo luận trước đó, khi bạn muốn thu thập các hành động xác thực của mình cho bất kỳ model cụ thể hoặc tài nguyên nào, thì đó là policy mà bạn đang tìm kiếm.

Trong phần này, chúng tôi sẽ tạo một policy cho model Post, nó sẽ được sử dụng để xác thực cho tất cả các hành động CRUD. Tôi giả thiết rằng bạn đã triển khai model Post trong ứng dụng của bạn; nếu không, một điều gì đó tương tự sẽ thực hiện nó.

Lệnh artisan của Laravel là người bạn thân nhất của bạn để sinh ra các đoạn code code. Bạn có thể sử dụng lệnh artisan sau đây để tạo một policy cho model Post.

Như bạn thấy, chúng tôi đã cung cấp tham số --model=Post để tạo ra tất cả các phương thức CRUD. Trong trường hợp không có, nó sẽ tạo ra một class Policy trống. Bạn có thể xác định vị trí class Policy mới tạo tại app/Policies/PostPolicy.php.

Hãy thay thế nó bằng đoạn code sau.

Để có thể sử dụng class Policy, chúng ta cần phải đăng ký nó bằng cách sử dụng service provider của Laravel như trong đoạn mã dưới đây.

Chúng tôi đã thêm mapping của Policy vào thuộc tính $policies. Thuộc tính này yêu cầu Laravel gọi phương thức policy tương ứng để xác thực hoạt động CRUD.

Bạn cũng cần phải đăng ký các policies bằng cách sử dụng phương thức registerPolicies, như chúng ta đã làm trong phương thức boot.

Tiếp tục, hãy tạo một vài route tùy biến trong file routes/web.php để chúng tôi có thể kiểm tra các phương thức Policy của chúng tôi ở đó.

Cuối cùng, hãy tạo controller tương tác ở ứng dụng app/Http/Controllers/PostController.php

Có nhiều cách khác nhau mà bạn có thể xác thực hoạt động của mình bằng cách dùng Policy. Trong ví dụ của chúng tôi ở trên, chúng tôi đã sử dụng model User để xác thực hoạt động model Post.

Model User cung cấp hai phương thức hữu ích cho mục đích xác thực - cancant. Phương thức can được sử dụng để kiểm tra nếu người dùng hiện tại có thể thực hiện một hành động cụ thể. Và phần đối lập của phương thức can, phương thức cant, được sử dụng để xác định sự bất khả thi của việc xử lý một hoạt động.

Hãy lấy đoạn code của phương thức view từ controller để xem chính xác điều đó là gì.

Thứ nhất, chúng ta nạp vào người dùng đã đăng nhập hiện tại, điều này ổng muốn đem đến đối tượng của model User.

Tiến hành trước, chúng tôi đã sử dụng phương thức can của model User để xác thực cho hoạt động view của model Post. Đối số đầu tiên của phương thức can là tên hoạt động mà bạn muốn xác thực, và đối số thứ hai là đối tượng model mà bạn muốn được nhận xác thực.

Đó là một cuộc minh hoạ về cách sử dụng model User để cho phép các hoạt động sử dụng các policies. Ngoài ra, bạn cũng có thể sử dụng Controller Helper, nếu bạn đang ở controller khi đang xác thực cho một hoạt động nhất định.

Như bạn thấy, bạn không cần tải model User nếu bạn sử dụng Controller Helper.

Vì vậy đó là khái niệm của policies bạn có thể sử dụng, và nó thực sự tiện dụng trong khi xác thực cho một model hoặc tài nguyên vì nó cho phép bạn thâu thập logic xác thực ủy quyền ở một nơi.

Chỉ cần đảm bảo rằng bạn không sử dụng gates và policies cùng nhau cho các hành động tương tự của một model, nếu không nó sẽ phát sinh vấn đề. Đó là phần trình bày của tôi cho ngày hôm nay, và tôi dừng lại ở đây!

Tổng kết

Hôm nay, trung tâm bài viết của tôi là cách xác thực của Laravel. Vào đầu bài viết, tôi đã giới thiệu các yếu tố chính của cách xác thực của Laravel, gates và policies của Laravel.

Sau đó, chúng ta đã xem xét tỉ mỉ việc tạo ra gate và policy tuỳ biến của chúng tôi để xem cách nó vận hành thực tế như thế nào. Tôi hy vọng bạn đã thích bài viết và học được điều gì đó hữu ích trong phạm vi của Laravel.

Đối với những bạn vừa mới bắt đầu với Laravel hoặc muốn mở rộng kiến ​​thức, trang web hoặc ứng dụng của bạn với các phần mở rộng, chúng tôi có nhiều điều bạn có thể học tại Envato Market.

Như mọi khi, tôi rất muốn nghe bình luận của bạn qua feed bên dưới!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.