Laravel中间件返回user_id的数据

时间:2016-06-20 16:02:10

标签: laravel middleware

是否有可能在laravel 5.2x中创建一个中间件,只为特定的user_id返回控制器中的数据,而不是在任何地方输入类似

的内容
->where('access_gallery','=',true)

例如,我的网页上有一个图库,用户可以上传照片裁剪等等。

我通过中间件检查他们的payment_datetime<当前数据时间,如果下一步是真的。

在下一步中我想返回/编辑/删除/裁剪/ ...,只有特定用户的照片,通常我必须使用@up代码创建查询,因为我们不希望user_1到编辑user_2页面。

将它复制到任何地方都有点烦人,如果我创建一个Admin帐户来访问所有内容,我必须为每个函数创建下一个查询以返回所有数据。

如果无法在中间件中创建类似的功能,是否可以在控制器中使用?

1 个答案:

答案 0 :(得分:2)

我认为你所寻找的是范围 - 甚至是全球范围。 https://laravel.com/docs/5.2/eloquent#global-scopes

Scopes下创建一个App目录。像这样创建一个文件:

<?php

namespace App\Scopes;

use Illuminate\Database\Eloquent\Scope;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;

class UserGallery implements Scope
{
    /**
     * Query if user has gallery
     *
     * @return void
     */
    public function apply(Builder $builder, Model $model)
    {
        return $builder->where('access_gallery','=',true);
    }
}

然后在您的模型中(您也希望应用此范围),将boot函数添加到模型类的开头:

use App\Scopes\UserGallery;

/**
* The "booting" method of the model.
*
* @return void
*/
protected static function boot()
{
    parent::boot();
    static::addGlobalScope(new UserGallery);
}

您甚至可以将范围放在trait级别......在我看来,看起来更清晰,更容易注入您的模型。

PS:限制放在中间件类中的逻辑数量。将中间件视为进入主要逻辑集的一扇门。该门打开或锁定以供用户访问。