Laravel-使用中间件来限制用户阻止的个人资料?

时间:2019-03-17 20:32:22

标签: laravel block middleware profile

我正在Laravel中进行一个项目,这是社交网络的抓手。我有一个重要的问题。我有一个具有用户个人资料的控制器,首先我要查看用户是否存在,如果不存在,则获取404,如果存在,则获取数据,然后控制器将其发送到视图。

但是现在我想我可以在用户之间建立一个阻塞系统。我用N:n创建了该表,这是阻止的用户ID和命运的用户ID。

我制作了一个中间件来检查用户是否被阻止。但是,此中间件在路由上执行,这意味着在检查用户是否存在之前执行了该中间件。它不会使我有任何问题。一切正常,但我的问题是:这是最好的解决方案?最好使用政策?

用户模型

public function usersBlockedI()
{
    return $this->belongsToMany(User::class, 'u_blocks', 'u_from', 'u_to');
}
  • 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');

});

0 个答案:

没有答案