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中,尝试将变量分配给字符串会导致解析错误,这是一个很好的解决方案。这样就不可能犯在条件句中使用=
的错误。