Laravel 自带很多权限认证,本小节先简单的介绍一下策略类来验证权限。

使用场景:判断用户对指定的文章是否有删除权限等相关场景。

    用户收货地址策略类
>$ php artisan make:policy UserAddressPolicy
<?php

namespace App\Policies;

use App\Models\User;
use App\Models\UserAddress;
use Illuminate\Auth\Access\HandlesAuthorization;

class UserAddressPolicy
{
use HandlesAuthorization;

/**
* Create a new policy instance.
*
* @return void
*/
public function __construct()
{
//
}

public function own( User $user, UserAddress $address )
{

return $user->id == $address->user_id;
}
}

自定义own方法,第一个参数是当前登录用户,第二个参数是收货地址信息。判断收货地址的user_id是不是当前用户,返回判断的结果。如果,校验通过,则程序继续执行;否则,会返回一个403的无权限异常。

    注册策略类
// AuthServiceProvider
...
use App\Models\UserAddress;
use App\Policies\UserAddressPolicy;
...
protected $policies = [
UserAddress::class => UserAddressPolicy::class,
];
    使用策略类

Laravel 提供了很多种校验权限的方法,这里先介绍一下在控制器里使用辅助函数来调用:

public function destroy( UserAddress $user_address )
{
$this->authorize('own', $user_address);
$user_address->delete();
return [];
}

解释下这段代码执行流程:

authorize('own', $user_address) 方法会获取第二个参数 $user_address 的类名:App\Models\UserAddress 

然后在 AuthServiceProvider 类的 $policies 属性中寻找对应的策略,这里就是 App\Policies\UserAddressPolicy,找到后会实例化这个策略类,再调用名为 own() 方法,如果 own() 方法返回 false 则会抛出一个未授权的异常。

由于能力有限,不足或有不解之处,希望在下方评论区与我讨论,共同提高 。