我制作了一个中间件,负责检查用户的权限。我在用户模型中实现了hasPermission函数。但是,当我尝试通过auth()->user
使用它时,出现以下错误,为什么会发生这种情况?
我在用户模型中实现了此方法
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');
}
}
这是因为user()
方法的返回类型为\Illuminate\Contracts\Auth\Authenticatable|null
,这是您的用户类实现的接口。这是因为它可能会根据您使用的防护返回不同的模型,但是它们都必须实现Authenticatable
。
我不知道一种简单的全局更改方法,但是您可以将用户保存在变量中并添加phpDoc块:
/** @var \App\User */
$user = auth()->user();
这应该被智能电话识别并显示正确的方法。