我正试图阻止某些用户访问管理面板。 我已经使用此代码创建了一个名为RequireAdminRole的中间件
public function handle($request, Closure $next, $guard = null)
{
$user = Auth::user();
dd($user);
if (!$user) {
return $next($request);
}
if (!$user->hasRole('Admin')) {
// if your sessions are decoupled from the frontend
// you can even logout the user like so:
// auth()->logout();
abort(403, 'Access denied');
}
return $next($request);
}
我已将其添加到kernel.php
'web' => [
\App\Http\Middleware\RequireAdminRole::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
我的问题ID $ user为空值,所以我无法获得用户权限。 有人可以帮我吗?
最诚挚的问候。
答案 0 :(得分:4)
中间件的顺序很重要,中间件处理程序按照定义的顺序执行。这意味着您正在尝试执行StartSession
中间件之前从会话中检索经过身份验证的用户。
因此,要解决您的问题,应将RequireAdminRole
中间件移到数组的末尾,或者至少移到StartSession
的定义之后。
'web' => [
// Other middleware definitions...
\App\Http\Middleware\RequireAdminRole::class
],