Sử dụng Gates và Policies trong Authorization Laravel

Tram Ho

Giới thiệu :

Hello mọi người , sau khi làm gần xong một dự án, mình đã học thêm được một vài điều mới khá là thú vị để cùng chia sẻ với mọi người. Hôm nay, mình ngoi lên để cùng mọi người trao đổi một chút về Gates Và Policies trong Laravel nhé

Ngoài việc cung cấp các authentication services , Laravel cũng cung cấp một cách đơn giản hơn để phân quyền cho các hành động của người dùng đối với một tài nguyên nhất định. Chúng ta có hai cách để thực hiện việc authorizing đó là : gates và policies.

Như trong tài liệu đã ghi :

Gates :

Gates là một Closures xác định người dùng được cho phép để thực hiện một hành động nhất định. Chúng ta định nghĩa trong class AppProvidersAuthServiceProvider và use IlluminateSupportFacadesGate.
Gates luôn luôn nhận một action của người dùng là đối số đầu tiên, chúng ta có thể tùy biến nhận đối số bổ sung như là một relevant Eloquent model:

Khi return một authorization response từ gates, Gate::allows return về giá trị boolean , nếu bạn muốn tự tùy biến response trả về, có thể sử dụng Gate::inspect

Và cuối cùng để sự dụng Gates thì chúng ta dùng như sau :

Policies :

Theo mình hiểu thì Policies là một Class quản lí các authorizing logic. Ví dụ nhé, mình có một trang quản lí và chỉ có Admin hay Pm mới có thể tạo project mới, thì chúng ta có mô hình Project và ProjectPolicy tương ứng để phân quyền cho các hành động của người dùng như tạo hoặc cập nhật project.

Khởi tạo Policies :

Chúng ta có thể khởi tạo Policies bằng câu lệnh :

php artisan make:policy ProjectPolicy hoặc gắn thêm cùng với model php artisan make:policy ProjectPolicy –Project

Đăng kí Polices :

Sau khi tạo xong để đăng kí policies, chúng ta đăng kí trong AppProvidersAuthServiceProvider.php mà chúng ta vừa tạo., ví dụ nhé :

Và để thiết lập quyền cho user nào được tạo project chúng ta đăng kí trong policies chúng ta vừa tạo :

Cuối cùng cách sử dụng rất là đơn giản thôi, trong controller ta gọi như sau :
Gate::authorize(‘view’, $project);

Kết bài :

Đó là cách sử dụng đơn giản về Gates và Policies mà mình đã dùng trong project đang làm, rất vui vì được chia sẻ cùng với mọi người

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo