Laravel 中间件 return 数据 user_id

Laravel middleware return data for user_id

是否可以在 laravel 5.2x 中为控制器中的 return 数据创建一个中间件,仅用于特定的 user_id 而不是在任何地方输入诸如

之类的东西
->where('access_gallery','=',true)

例如,我的网页上有一个画廊,用户可以在其中上传照片、裁剪等。

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

下一步我想 return/edit/delete/crop/...,只有特定用户的照片,通常情况下我必须使用 @up 代码创建一个查询,因为我们不想要 user_1 编辑 user_2 页。

将它复制到任何地方有点烦人,而且如果我创建一个管理员帐户来访问所有内容,我必须为每个函数创建下一个查询以 return 它们的所有数据。

如果不能在中间件中创建这样的功能,那么在控制器中可以吗?

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

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

<?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 函数添加到模型的开头 class:

use App\Scopes\UserGallery;

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

您甚至可以将示波器放在 trait class 中...在我看来,这看起来会更干净并且更容易注入您的模型。

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