首页 > 解决方案 > 为用户和管理员显示内容

问题描述

我希望普通用户看不到状态为 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]);
    }

标签: laravel

解决方案


您可以通过在查询本身中使用 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]);
    }

推荐阅读