连接用户后获取反馈

时间:2019-09-13 22:37:23

标签: laravel laravel-5

当用户连接并希望查阅反馈部分时,用户会看到每个用户的每个反馈。我想知道是否有可能限制这一点?

例如,如果用户是 jeremy@gmail.com ,则Jeremy只能看到他的反馈。

enter image description here

这是我编写代码的一个主意,在此先感谢您的帮助。

    public function index(Request $request)
    {   
        $user = $request->user();

        $feedbacks = Feedback::query()
            ->when($user->hasRole('admin') !== true, function (Builder $query) use ($user) {
                \Auth::user()->load('feedbacks');
                $feedbacksForThisUser = \Auth::user()->feedbacks;
            })
            ->when($request->has('search'), function (Builder $query) use ($request) {
                $query->join('eleves', 'feedbacks.fk_eleve', '=', 'eleves.id')->orderBy('eleves.nom', 'asc')->where('eleves.nom','like','%'.$request->input('search').'%');
             })
            ->paginate(5);

        return view('admin.feedbacks.index', compact('feedbacks'))
            ->with('display_search', $user->hasRole('admin'));
    }

修改

用户模型

 public function retours()
    {
        return $this->hasMany('App\Retour', 'user_id', 'id');
    }

用户反馈

public function students(){

    return $this->belongsTo('App\Student', 'fk_student');
    }

    public function feedbacks()
    {
        return $this->hasManyThrough(
            'App\Feedback',
            'App\Student',
            'fk_seance', 
            'fk_student',
            'id', 
            'id' 
        );
    }

    public function user()
    {
        return $this->belongsTo('App\User', 'id', 'user_id');
    }

还有

            $table->increments('id');
            $table->integer('user_id')->unsigned()->nullable();
            $table->foreign('user_id')->references('id')->on('users');
            $table->string('instruction', 30);
            $table->text('description', 80);
            $table->integer('fk_student')->unsigned();
            $table->foreign('fk_student')->references('id')->on('students');

1 个答案:

答案 0 :(得分:4)

好的。如果是普通用户,则只能使用feedbacks = \Auth::user()->feedbacks;。这将仅限于登录用户的反馈。

如果您想允许管理员查看所有反馈,请检查admin,然后提供所有反馈。因此,仅对于用户或管理员(没有搜索代码),像这样:

public function index(Request $request)
{   
    if(\Auth::user()->hasRole('admin')){
        $feedbacks = Feedback::all();
    }else{
        \Auth::user()->load('feedbacks');
        $feedbacks = \Auth::user()->feedbacks;
    }

    return view('admin.feedbacks.index', compact('feedbacks'));
}

您可以将搜索代码添加到任何一个if块中,具体取决于您希望用户如何查看搜索。您可以在查询中使用when(),但我仅用if进行演示,以使其更易于理解:

public function index(Request $request)
{   
    if(\Auth::user()->hasRole('admin')){
         if($request->has('search'))
              $feedbacks = Feedback::orderBy('nom', 'asc')->where('nom','like','%'.$request->input('search').'%');
         else
             $feedbacks = Feedback::all();
    }else{
         \Auth::user()->load('feedbacks');
         $feedbacks = \Auth::user()->feedbacks;
    }

    return view('admin.feedbacks.index', compact('feedbacks'));
}