Laravel-如何在中间件之间进行路由操作?

时间:2018-08-06 05:02:50

标签: laravel laravel-5 routes laravel-middleware

我的网站上有一个表格users,并且如果该用户是admin或他/她的帐户,则允许用户更新该用户。我可以将此规则放入中间件中,并将其强加到路由上,但是我想创建单独的中间件,并在其中创建OR。我可以这样做吗?

以下代码

Route::group(['middleware' => ['admin','Owner']],
    function () {
        Route::resource('roles', 'RoleController');
        Route::resource('locations', 'LocationController');
        Route::resource('recipients', 'RecipientController');
        Route::resource('classifications', 'ClassificationController');
    });

具有AND的行为。我认为可以在if ... else ...web.php内使用一些UserController语句来做到这一点,但我需要知道是否还有其他出路。

预先感谢


更新

这是所有者中间件

class OwnerMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next, $id)
    {
        if(Auth::guest())
            return abort(403, 'Access Denied');
        if(Auth::user()->id != $id)
            return abort(403, 'Access Denied');
        return $next($request);
    }
}

然后我将$id参数传递给它。

1 个答案:

答案 0 :(得分:1)

中间件确实没有“或”。它要么起作用要么通过。您必须扩展当前的中间件以检查所有权或编辑权限。

但是,我建议使用带有中间件的策略来解决此问题: 参见:https://laravel.com/docs/master/authorization#via-middleware