Authorization responses trong Laravel 6.0

2nd Nov 2022
Authorization responses trong Laravel 6.0
Table of contents

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à allows và denies, 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 [email protected] 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 == '[email protected]';
    }
  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ề:

Authorization responses trong Laravel 6.0

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:

Authorization responses trong Laravel 6.0

Hoặc nếu bị deny:

Authorization responses trong Laravel 6.0

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

Authorization responses trong Laravel 6.0

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.

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é.

Bạn thấy bài viết này như thế nào?
1 reaction

Add new comment

Image CAPTCHA
Enter the characters shown in the image.

Related Articles

Danh sách này có 4 sản phẩm nên chưa cần phân trang, nếu số lượng sản phẩm lên đến vài chục sản phẩm

Hiện nay kiến trúc Microservices đang là chủ đề được cộng đồng Developer vô cùng quan tâm

Hôm nay chúng ta cùng tìm hiểu về Eloquent trong Laravel với mối quan hệ nhiều - nhiều (many to many relationship)

Kiểm soát hợp lí truy cập nội dung trang web là yếu tố quyết định trong việc điều hành một máy chủ bảo mật.

Trước đây, với các dự án được quản lý source code trên Github, chúng ta thường cần sử dụng thêm một số CI/CD service như Jenkins