Laravel 授权


在上一章中,我们研究了 Laravel 中的身份验证过程。本章向你解释 Laravel 中的授权过程。

认证和授权的区别


在进一步了解 Laravel 中的授权过程之前,让我们了解身份验证和授权之间的区别。

验证,系统或 Web 应用程序通过他们提供的凭据识别其用户,如果它发现凭据有效,则对它们进行身份验证,否则就无效。

授权,系统或 Web 应用程序检查经过身份验证的用户是否可以访问他们尝试访问或发出请求的资源,换句话说,它检查他们对所请求资源的权利和许可,如果发现他们可以访问资源,就说明他们被授权了。

验证涉及检查用户凭据的有效性,授权涉及检查经过身份验证的用户拥有的资源的权限。

Laravel 中的授权机制


Laravel 提供了一种简单的授权机制,包含两种主要方式,即GatesPolicies

编写Gates和Policies

Gates 用于确定用户是否有权执行指定的操作,它们通常定义在app/Providers/AuthServiceProvider.php中使用Gate facade,Gates是为执行授权机制而声明的功能。

Policies 被声明在一个数组中,并被用于使用授权机制的类和方法中。

以下代码行解释了如何在 Laravel Web 应用程序中使用 Gates 和 Policies 来授权用户,在此示例中的boot()函数用于授权用户:

<?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);
        //
    }
}