Gate là gì trong laravel
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.
GATE là 1 trong những thành phần tạo nên hệ thống authorization trong laravel. Gates cho phép bạn định nghĩa một closure-based đơn giản để thực hiện 1 hành động gì đó theo ý bạn. Nói cách khác, khi bạn muốn cấp quyền một hành động không liên quan đến model cụ thể nào, thì nên dùng gate để triển khai logic đó.
Ví dụ mô tả Gate laravel
Cùng xem ví dụ dưới đây:
vào file: \app\Providers\AuthServiceProvider.php thêm code dưới đây:
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
Gate::define('edit-comment', function ($user, $commment) {
return $user->id == $comment->user_id;
});
}
đoạn code ngắn trên để define 1 function Closures, hàm này kiểm tra user đang login có phải user đã đăng comment không?
Lưu ý 1: khi bạn dùng Gate laravel bạn nhớ sử dụng từ use Illuminate\Support\Facades\Gate;
Lưu ý 2: Gate sẽ luôn nhận tham số đầu tiên là một thể hiện của lớp User, tức là mặc định, Gate sẽ nhận diện user đang đăng nhập là tham số thứ nhất, do đó, với các user đang đăng nhập, khi sử dụng Gate, ta sẽ không cần thiết phải truyền user vào. => Lát nữa khi gọi hàm ta chỉ cần truyền 1 tham số $commment
Sử dụng Gate
public function editComment()
{
$comment = Comment::find(1); // tìm comment có id = 1
/// kiểm tra user đang login có phải đã đăng comment không thì mới cho edit
if (Gate::allows('edit-comment', $comment)) {
//// bạn có quyền edit trong này
} else {
/// Ban khong co quyen chinh sua comment
}
}
Khi bạn sử dụng Gate, đặc điểm cốt lõi dễ phân biệt nhất vẫn là Gate là function, khác với Policy lại là class. Cùng 1 tư tưởng là sẽ làm để check auth nhưng khác nhau đôi chút. nếu bạn quan tâm Policy là gì thì follow bài viết này nhé: Policy trong laravel