Php 使用型号';中间件中的s功能?

Php 使用型号';中间件中的s功能?,php,laravel,Php,Laravel,我正在使用Laravel5.1并创建一个“管理”中间件来检查用户是否有权访问特定页面 我想这样做,但不起作用: public function handle($request, Closure $next) { if ($this->auth->guest() or !$this->auth->user()->isAdmin()) return redirect()->guest('auth/signin'); return

我正在使用Laravel5.1并创建一个“管理”中间件来检查用户是否有权访问特定页面

我想这样做,但不起作用:

public function handle($request, Closure $next)
{
    if ($this->auth->guest() or !$this->auth->user()->isAdmin())
        return redirect()->guest('auth/signin');

    return $next($request);
}
所以我像这样实现了我的目标,但这似乎很奇怪:

public function handle($request, Closure $next)
{
    if ($this->auth->guest() or ! User::find($this->auth->user()->id)->isAdmin())
        return redirect()->guest('auth/signin');

    return $next($request);
}

有什么建议吗?我遗漏了什么吗?

我不知道,但是如果你复制了你的代码
$此->身份验证->用户-()->isAdmin()

,这是一个错误。用户之后,您有了“
-()

好的,谢谢您的帮助:

我有两个用户类(一个在
App\User
中,另一个在
App\Models\User
中)。我在
config/auth.php
中更改了配置,将模型设置为
App\Models\User::class
,并删除了安装Laravel时存在的默认用户模型。现在isAdmin()函数可以工作了

正如xAoc告诉我的,代码如下:

public function handle($request, Closure $next)
{
    if (!$this->auth->user()->isAdmin())
        return redirect()->guest('auth/signin');

    return $next($request);
}

如果
dd($this->auth->user())
给你一个
user
(它应该)的实例,你的if语句是错误的,因为默认情况下guest不能是管理员。您应该创建另一个中间件,其中check user是admin,并将其放在来宾中间件之后。复制代码时出错。谢谢你的帮助。