为什么Laravel中间件中的智能无法识别用户模型中的功能?

问题描述 投票:0回答:1

我制作了一个中间件,负责检查用户的权限。我在用户模型中实现了hasPermission函数。但是,当我尝试通过auth()->user使用它时,出现以下错误,为什么会发生这种情况?

enter image description here

我在用户模型中实现了此方法

public function hasPermission($permission)
{
    return in_array($this->permissions(), $permission);
}

这是中间件

<?php

namespace App\Http\Middleware;

use Closure;

class VerifyPermission
{
    public function handle($request, Closure $next, $permission)
    {
        if (auth()->check() && auth()->user()->hasPermission($permission)) {
            return $next($request);
        }
        abort(401, 'Unauthorized');
    }
}
laravel middleware
1个回答
0
投票

这是因为user()方法的返回类型为\Illuminate\Contracts\Auth\Authenticatable|null,这是您的用户类实现的接口。这是因为它可能会根据您使用的防护返回不同的模型,但是它们都必须实现Authenticatable

我不知道一种简单的全局更改方法,但是您可以将用户保存在变量中并添加phpDoc块:

/** @var \App\User */
$user = auth()->user();

这应该被智能电话识别并显示正确的方法。

© www.soinside.com 2019 - 2024. All rights reserved.