Laravel无法通过多个中间件

时间:2018-07-13 15:20:46

标签: php laravel laravel-5 laravel-middleware

最近,我创建了两个中间件,一个是针对称为设备的用户的,另一个是针对具有高级管理权限的超级用户的。这是我的中间件

角色设备中间件

<?php

namespace App\Http\Middleware;

use Closure;

class RoleDevice
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(Auth::check() && Auth::User()->role=='device'){
            return $next($request);
        }
        return redirect()->route('login')->with('danger',"You don't have an access");
    }
}

角色设备超级用户

<?php

namespace App\Http\Middleware;

use Closure;
use Auth;
use User;
class RoleSuper
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(Auth::check() && Auth::User()->role=='super'){
            return $next($request);
        }
        return redirect()->route('login')->with('danger',"You don't have an access");
    }
}

创建中间件后,我将其放入路由中,一条路由可以访问两个中间件。这是我的路线之一。

Route::get('/dashboard','DashboardController@index')->middleware(['rolesuper','roledevice'])->name('dashboard');

当我尝试登录我的网站时,它会返回

You don't have an access

这不会传递给中间件。

我希望我能收到以上任何评论! 谢谢。

1 个答案:

答案 0 :(得分:2)

中间件按照传递的顺序执行。因此,如果第一个中间件返回的只是重定向响应-第二个中间件将不会执行。

您可以将两种中间件组合为一个,并以middleware parameter的身份传递可用的角色,或者为此仅创建一个中间件来验证用户是否被授权。