Я работаю над проектом в Laravel, это царапина в социальной сети.У меня важный вопрос.У меня есть контроллер с профилем пользователя, там, во-первых, я смотрю, если пользователь существует, если не существует, он получает 404, если существует получить данные и контроллер отправляет их в представление.
Но теперь я думал, что смогу создать систему блокировки между пользователями.Я создал таблицу с N: n, где блокировался идентификатор пользователя и идентификатор пользователя.
Я сделал Middleware, чтобы проверить, заблокированы ли пользователи.Но это промежуточное программное обеспечение выполняется на маршруте, и это означает, что выполняется перед проверкой, существует ли пользователь.Это не делает меня проблемой.Это все работает, но мой вопрос: это лучшее решение?Лучше использовать политику?
Модель пользователя
public function usersBlockedI()
{
return $this->belongsToMany(User::class, 'u_blocks', 'u_from', 'u_to');
}
- u_blocks - это имя таблицы.
- u_from - это имя пользователя, который сделалblock.
- u_ для пользователя, получившего блок.
Контроллер пользователя:
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'));
}
}
Middle Middleware
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');
});