Laravel - использовать Middleware для ограничения заблокированного профиля пользователя? - PullRequest
0 голосов
/ 17 марта 2019

Я работаю над проектом в 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');

});

...