我试图阻止某些用户访问管理面板。我已经创建了一个中间件,其代码为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具有空值,因此我无法获得用户权限。有谁能够帮助我?
最好的祝福。
中间件的顺序很重要,按照定义的顺序执行中间件处理程序。这意味着您正在尝试StartSession
在执行中间件之前从会话中检索经过身份验证的用户。
因此,要解决您的问题,您应该将RequireAdminRole
中间件移至数组的末尾,或者至少移至的定义之后StartSession
。
'web' => [
// Other middleware definitions...
\App\Http\Middleware\RequireAdminRole::class
],
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句