我正在Laravel中进行一个项目,这是社交网络的抓手。我有一个重要的问题。我有一个具有用户个人资料的控制器,首先我要查看用户是否存在,如果不存在,则获取404,如果存在,则获取数据,然后控制器将其发送到视图。
但是现在我想我可以在用户之间建立一个阻塞系统。我用N:n创建了该表,这是阻止的用户ID和命运的用户ID。
我制作了一个中间件来检查用户是否被阻止。但是,此中间件在路由上执行,这意味着在检查用户是否存在之前执行了该中间件。它不会使我有任何问题。一切正常,但我的问题是:这是最好的解决方案?最好使用政策?
用户模型
public function usersBlockedI()
{
return $this->belongsToMany(User::class, 'u_blocks', 'u_from', 'u_to');
}
用户控制器:
public function showProfile($username)
{
$profileUser = User::where('username', $username)->first();
if ($profileUser == null) {
return abort(404);
} else {
$profileUser['dataUser'] = dataUser::where('u_id', $profileUser['id'])->first();
return view('user.profile', compact('profileUser'));
}
}
块中间件
public function handle($request, Closure $next)
{
if (auth()->user()) {
$usernameProfile = $request->route('username');;
$ActualuserID = auth()->user()->id;
$checkIfBlocked = User::where('username', $usernameProfile)->first()->usersBlockedI->where('id', $ActualuserID);
if (!sizeof($checkIfBlocked) == 0) {
abort(404);
}
}
return $next($request);
}
路线
Route::group(['middleware' => 'blocked'], function () {
Route::get('/{username}', 'UserController@showProfile')->name('showProfile');
});