Authorization responses trong Laravel 6.0

Trong lập trình web, authorization (phân quyền) là chức năng vô cùng quan trọng và không thể thiếu. Có nhiều cách phân quyền trong laravel, trong đó sử dụng gates là cách mà khá nhanh và dễ sử dụng.

Trong các phiên bảng trước, Laravel cung cấp 2 method authorizing actions là allowsdenies, với cách dùng khá đơn giản:

if (Gate::allows('permission')) {
    // User hiện tại có quyền...
}
if (Gate::denies('permission')) {
    // User hiện tại không có quyền...
}

Rất nhanh phải không ạ, tuy nhiên, chúng ta rất khó để đưa ra các thông báo khác nhau cho người dùng nếu người dùng đấy không có quyền. Với phiên bản release 6.0, Laravel đã cung cấp thêm 1 method Gate::inspect, giúp dễ dàng hơn trong việc custom thông báo cho người dùng. Cú pháp rất đơn giản:

$response = Gate::inspect('permission');

if ($response->allowed()) {
    // User hiện tại có quyền...
} else {
    return $response->message();
}

Sau đây mình sẽ sử dụng thử xem như thế nào ^^.

  1. Các bước tạo project mình không đưa vào nhé.
  2. Đầu tiên, đăng ký một tài khoản với email của mình tungpd@haposoft.com và tiến hành login.
  3. Trong Model User, tạo 1 hàm để kiểm tra xem user hiện tại có phải là mình hay không.
public function isTung()
    {
        return $this->email == 'tungpd@haposoft.com';
    }
  1. Tiếp theo, trong class AuthServiceProvider(bạn có thể tìm nó trong App\Providers)
    Tiến hành đăng ký một permisson :
public function boot()
    {
        Gate::define('authorization', function ($user) {
            return $user->isAdmin()
                ? Response::allow()
                : Response::deny('You must be a super administrator.');
        });
    }
  • Lưu ý: Params $user laravel sẽ tự động lấy user đang login, nên chúng ta không cần truyền tham số này.
    Vậy là xong, thử dùng nó xem, mình sẽ dd response trả về:
  • Với method cũ, response trả về chỉ là boolean:
    true

Với method inspect, chúng ta có thể lấy được tất cả response trả về bởi gate:

Hoặc nếu bị deny:

Từ đó, có thể dễ dàng kiểm tra và lấy message để thông báo cho người dùng:

Trên đây là nội dung nâng cấp Authorization trong Laravel 6, rất mong nhận được sự góp ý của mọi người. Cảm ơn đã theo dõi bài viết của mình.

Xem thêm bài cùng chuyên mục : Laravel 6.0 có gì mới ?

P/s:
Nếu có vẫn gặp vướng mắc trong khi thực hành hoặc có bất kì thắc mắc về PHP, Laravel hay muốn tìm hiểu thêm các thông tin hữu ích, các bạn hãy tham gia group Laravel VietNam để được các admin và thành viên support trực tiếp vấn đề mà bạn gặp phải nhé.