Laravel - Ủy quyền

Trong chương trước, chúng ta đã nghiên cứu về quá trình xác thực trong Laravel. Chương này giải thích cho bạn quy trình ủy quyền trong Laravel.

Sự khác biệt giữa xác thực và ủy quyền

Trước khi tiếp tục tìm hiểu thêm về quy trình ủy quyền trong Laravel, chúng ta hãy hiểu sự khác biệt giữa xác thực và ủy quyền.

Trong authentication, hệ thống hoặc ứng dụng web xác định người dùng của nó thông qua thông tin xác thực mà họ cung cấp. Nếu nó nhận thấy rằng thông tin xác thực là hợp lệ, chúng được xác thực hoặc nếu không thì không.

Trong authorization, hệ thống hoặc ứng dụng web kiểm tra xem người dùng được xác thực có thể truy cập vào tài nguyên mà họ đang cố gắng truy cập hoặc yêu cầu hay không. Nói cách khác, nó kiểm tra các quyền và sự cho phép của họ đối với các tài nguyên được yêu cầu. Nếu nó phát hiện ra rằng họ có thể truy cập các tài nguyên, điều đó có nghĩa là họ được ủy quyền.

Vì vậy, authentication liên quan đến việc kiểm tra tính hợp lệ của thông tin đăng nhập người dùng và authorization liên quan đến việc kiểm tra các quyền và quyền đối với các tài nguyên mà người dùng đã xác thực có.

Cơ chế ủy quyền trong Laravel

Laravel cung cấp một cơ chế đơn giản để ủy quyền có hai cách chính, đó là GatesPolicies.

Viết Cổng và Chính sách

Các cổng được sử dụng để xác định xem người dùng có được phép thực hiện một hành động cụ thể hay không. Chúng thường được định nghĩa trongApp/Providers/AuthServiceProvider.phpsử dụng mặt tiền Cổng. Cổng cũng là các hàm được khai báo để thực hiện cơ chế ủy quyền.

Các chính sách được khai báo trong một mảng và được sử dụng trong các lớp và phương thức sử dụng cơ chế ủy quyền.

Các dòng mã sau giải thích cho bạn cách sử dụng Gates và Policies để cấp quyền cho người dùng trong ứng dụng web Laravel. Lưu ý rằng trong ví dụ này,boot chức năng được sử dụng để cấp quyền cho người dùng.

<?php

namespace App\Providers;

use Illuminate\Contracts\Auth\Access\Gate as GateContract;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider{
   /**
      * The policy mappings for the application.
      *
      * @var array
   */
   
   protected $policies = [
      'App\Model' => 'App\Policies\ModelPolicy',
   ];
   
   /**
      * Register any application authentication / authorization services.
      *
      * @param \Illuminate\Contracts\Auth\Access\Gate $gate
      * @return void
   */
   
   public function boot(GateContract $gate) {
      $this->registerPolicies($gate);
      //
   }
}