Php Laravel中间件不限制路由访问

Php Laravel中间件不限制路由访问,php,laravel,Php,Laravel,我创建了一个中间件,它只允许用户拥有角色客户端。 但是,当我使用中间件时,它仍然允许没有客户端角色的用户访问路由 public function handle($request, Closure $next) { $user = \Auth::user(); if ($user && $user->role = 'client') { return $next($request); } return redirect('ho

我创建了一个中间件,它只允许用户拥有角色
客户端
。 但是,当我使用中间件时,它仍然允许没有客户端角色的用户访问路由

public function handle($request, Closure $next)
{
    $user = \Auth::user();
    if ($user && $user->role = 'client') {
        return $next($request);
    }

    return redirect('home');

}
这是我的路线。我对其他工作正常的中间件也做了同样的事情。但不是这个

Route::group(['middleware'=>['auth']],function(){

Route::group(['middleware'=>['client']],function(){

   Route::get('/index',[
'as' => 'index',
'uses' => 'HomeController@showCandidates',
]);
});
});
当角色不是客户端时,它不应该允许访问路由,但它确实允许

编辑根据alexey的回答,我用==更改了另一个中间件,上面的问题就解决了。但下面的中间件限制了我访问路线,即使我的角色是面试官

public function handle($request, Closure $next)
{
    $user = \Auth::user();

    if($user && $user->roles == 'interviewer'){
        return $next($request);
    }
    return redirect('home');

}
这是我的路线

Route::group(['middleware'=>['auth','interviewer']],function(){

Route::get('/candidates', [
'uses' => 'candidateController@showProfile',
]);
});

我在这里可能犯的错误是什么。当在面试官中间件中使用
=
和在客户端中间件中使用
=
时,它可以正常工作,反之亦然。

既然您正在检查角色,请更改以下内容:

$user->role = 'client'
为此:

$user->role == 'client'

由于您正在检查角色,请更改以下内容:

$user->role = 'client'
为此:

$user->role == 'client'

我找到了一个很好的约定,叫做“尤达条件”(Yoda Conditions),以避免将来出现此类问题

在你的

if ($user && $user->role = 'client') {
    return $next($request);
}
而是

$user->role == 'client'

如果您错误地键入了
=
而不是
=
$user->role
未被分配值
client
,则此操作非常有用。所以你可以避免意外的行为


阅读更多关于

的信息,我发现了一个叫做尤达条件的很好的约定来避免将来出现此类问题

在你的

if ($user && $user->role = 'client') {
    return $next($request);
}
而是

$user->role == 'client'

如果您错误地键入了
=
而不是
=
$user->role
未被分配值
client
,则此操作非常有用。所以你可以避免意外的行为


阅读更多关于

这是另一个问题,今后请为任何新问题创建另一个问题,这就是如何工作。关于您的新问题,您有一个打字错误,应该是
角色
,而不是
角色
。这是另一个问题,以后请为任何新问题创建另一个问题,这就是如何工作的。关于您的新问题,您有一个输入错误,在PHP7中应该是
role
,而不是
roles
,尝试将变量分配给字符串会导致解析错误,这是一个很好的解决方案。这使得在条件语句中使用
=
是不可能出错的。在PHP7中,尝试将变量分配给字符串会导致解析错误,这是一个很好的解决方案。这样就不可能犯在条件句中使用
=
的错误。