在我的应用程序中,我可以将用户标记为已阻止。在被阻止的标记后,他无能为力。
我的解决方案是检查每个构造控制器中的状态,如果经过身份验证的用户被标记为阻止,他将重定向到视图。
但我的解决方案并不是很好,因为我已经公开了代码,我必须检查实际路线。
这是我的代码:
public function __construct()
{
$this->middleware('auth');
$this->middleware(function ($request, $next)
{
$this->user= Auth::user();
if(strcmp(Route::currentRouteName(), 'user.password.show') != 0)
{
if(strcmp(Route::currentRouteName(), 'user.password.set') != 0)
{
if(strcmp(Route::currentRouteName(), 'user.blocked.show') != 0)
{
if($this->user->status == Userstatus::where('type', 'passwordSetFalse')->first()->id)
{
Session::flash('error', 'Bitte setzen Sie ihr Passwort!');
return Redirect::route('user.password.show');
}
else
{
return $next($request);
}
}else
{
return $next($request);
}
}
else
{
return $next($request);
}
}
else
{
return $next($request);
}
});
}
我搜索了一个解决方案,我把代码放了一次,我可以将它用于我的所有控制器,但我不知道代码可以写在哪里。
非常感谢你的帮助
答案 0 :(得分:0)
看看Laravel Middlewares。定义一个中间件,在将请求传递给控制器之前检查用户状态,而不是在app/Http/Kernel.php
中注册中间件。
<?php
namespace App\Http\Middlewares;
class UserBlockedMiddleware
{
public function handle($request, $next)
{
$user = \Auth::user();
if($user->status == 'blocked') abort(403);
return $next($request);
}
}
要详细了解如何注册全局中间件,请在Laravel文档中查看此section。
答案 1 :(得分:0)
您需要了解Protecting Routes
您可以将auth
中间件附加到要保护的路由,或直接在控制器的__construct
中
Laravel附带一个auth中间件,在Illuminate \ Auth \ Middleware \ Authenticate中定义
如果您需要own Auth middleware,可以输入以下内容
php artisan make:middleware MyOwnAuth
你也可以实际减少代码
public function __construct()
{
$this->middleware('auth');
$this->middleware(function ($request, $next) {
$this->user = Auth::user();
if (
strcmp(Route::currentRouteName(), 'user.password.show') != 0
&& strcmp(Route::currentRouteName(), 'user.password.set') != 0
&& strcmp(Route::currentRouteName(), 'user.blocked.show') != 0
&& $this->user->status == Userstatus::where('type', 'passwordSetFalse')->first()->id
) {
Session::flash('error', 'Bitte setzen Sie ihr Passwort!');
return Redirect::route('user.password.show');
};
return $next($request);
});
};