© 2026 Laravel

Gate & Policy: Hệ thống Authorization tinh gọn

1 phút đọc
#laravel #auth #gate #policy #rbac

Mục lục bài viết

Sử dụng các mục để điều hướng nhanh

#1. Bản chất

  • Gate: Dùng cho các logic đơn giản, không gắn liền với Model (VD: Gate::define('access-dashboard', ...)).
  • Policy: Gắn liền với một Model (VD: PostPolicy cho Post Model).

#2. Cách hoạt động

Laravel sử dụng Illuminate\Auth\Access\Gate. Khi bạn gọi can(), Gate sẽ tự động map class Model với Policy tương ứng thông qua Policy Mapping.

#3. Câu hỏi nhanh

Q: Tại sao nên ưu tiên dùng Policy hơn Gate? A: Policy tổ chức code tốt hơn (S/O trong SOLID). Mỗi model có 1 file Policy riêng, tránh làm phình to AuthServiceProvider.

Q: Làm sao để kiểm tra quyền mà không throw ra Exception? A: Sử dụng Gate::allows() hoặc Gate::check() thay vì $user->can(). can() sẽ ném AuthorizationException nếu quyền không được cấp.

Bài viết liên quan