laravel - 为用户和管理员显示内容
问题描述
我希望普通用户看不到状态为 0(不可见)的图片,只有可见的图片(状态 1),但管理员可以看到所有内容。
这种解决方案是可行的还是有更清洁的事情要做?大门/政策不适合那个,我没有看到任何其他解决方案,这就是我来找你的原因
提前致谢
public function show($name)
{
if(Auth::user()->isAdmin()) {
$model = cache()->remember('model_show'.$name, Config::get('cache.ttl'), function() use ($name) {
return Model::where('name', $name)->with('pictures')->first();
});
$pictures = $model->pictures()->latest()->paginate(18);
} else {
$model = cache()->remember('model_show'.$name, Config::get('cache.ttl'), function() use ($name) {
return Model::where('name', $name)->with('visible_pictures')->first();
});
$pictures = $model->visible_pictures()->latest()->paginate(18);
}
return view('model.model')->with(['model' => $model, 'pictures' => $pictures]);
}
解决方案
您可以通过在查询本身中使用 when 函数来清理它。
public function show($name)
{
$model = cache()->remember('model_show'.$name, Config::get('cache.ttl'), function() use ($name) {
return Model::where('name', $name)->when( Auth::user()->isAdmin() , function ($q)
{
return $q->with('pictures');
}, function ($q)
{
return $q->with('visible_pictures');
})->first();
});
$pictures = $model->pictures()->latest()->paginate(18);
return view('model.model')->with(['model' => $model, 'pictures' => $pictures]);
}
或者我们也可以使用箭头函数
public function show($name)
{
$model = cache()->remember('model_show'.$name, Config::get('cache.ttl'), function() use ($name) {
return Model::where('name', $name)->when( Auth::user()->isAdmin() ,
fn($q) => $q->with('pictures') ,
fn($q) => $q->with('visible_pictures')
)->first();
});
$pictures = $model->pictures()->latest()->paginate(18);
return view('model.model')->with(['model' => $model, 'pictures' => $pictures]);
}
推荐阅读
- assembly - Turbo Assembler 在尝试打印新消息时打印上一条消息
- python - 如何计算新列中的累积加权平均值?
- vb.net - 我如何将一个巨大的字符串分成更小的部分?
- java - 如何使用 indexOf() 函数查找具有特定属性的对象
- javascript - 将循环更改为 Promise.all()
- javascript - Javascript 排序在中间停止工作
- android - Android 上的 KeyboardAvoidingView 在键盘上方创建一个灰色框
- ansible - 使用 pm2 管理多个应用程序/ecosystem.config.js 文件
- reactjs - 如何将标签包装在
与 ConnectedRouter? - reactjs - 在 React 中从另一个表单中提交表单