当用户连接并希望查阅反馈部分时,用户会看到每个用户的每个反馈。我想知道是否有可能限制这一点?
例如,如果用户是 jeremy@gmail.com ,则Jeremy只能看到他的反馈。
这是我编写代码的一个主意,在此先感谢您的帮助。
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');
答案 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'));
}