StaffMiddleware和AdminMiddleware Laravel 5.3

StaffMiddleware和AdminMiddleware Laravel 5.3,laravel,middleware,Laravel,Middleware,我有两个中间商 我的员工 public function handle($request, Closure $next) { if( $request->user()->role->name != 'staff'){ return redirect()->route('store'); } return $next($request); } public function handle($request, Closure $ne

我有两个中间商

我的员工

public function handle($request, Closure $next)
{
    if( $request->user()->role->name != 'staff'){

        return redirect()->route('store');
    }
    return $next($request);
}
public function handle($request, Closure $next)
{
    if( $request->user()->role->name != 'admin'){

        return redirect()->route('store');
    }
    return $next($request);
}
我的管理员中间件

public function handle($request, Closure $next)
{
    if( $request->user()->role->name != 'staff'){

        return redirect()->route('store');
    }
    return $next($request);
}
public function handle($request, Closure $next)
{
    if( $request->user()->role->name != 'admin'){

        return redirect()->route('store');
    }
    return $next($request);
}
问题是我的控制器

public function __construct(UnitInterface $unit){

        $this->middleware('staff');
        $this->middleware('admin);
        $this->unit = $unit;
    }

它应该是工作人员或管理员的角色。是否需要创建另一个中间件来将两者结合起来?

这完全取决于中间件的设计方式。正如您从代码中看到的,如果角色不是staff或admin,它会简单地重定向,因此您将无法拥有一个或逻辑

但是,您可以使用中间件参数来避免这种情况

    $this->middleware('role:admin,staff');
这将使用
角色
中间件,并将
管理员
员工
作为参数传递

**try this**

public function __construct(UnitInterface $unit){

      $this->middleware(function ($request, $next) {
        if($request->user()->role->name == 'staff' || $request->user()->role->name == 'admin')
          {
            return $next($request);
          }
           return redirect()->route('store')
        });
    }
然后,您可以在中间件中使用这些参数:

public function handle($request, Closure $next, ...$params)
{
    if(!in_array($request->user()->role->name, $params)){

        return redirect()->route('store');
    }
    return $next($request);
}
这会将附加参数捕获到一个数组
$params
,您可以在其中检查用户角色是否与其中一个参数匹配

**try this**

public function __construct(UnitInterface $unit){

      $this->middleware(function ($request, $next) {
        if($request->user()->role->name == 'staff' || $request->user()->role->name == 'admin')
          {
            return $next($request);
          }
           return redirect()->route('store')
        });
    }

没有中间件

是的,我知道,我们可以实现“管理员或员工”吗?如果它有管理员或职员的角色,那么就没有问题了。@Rbex,我已经更新了我的答案,以说明如何使用参数使中间件更灵活。它需要对您的中间件进行更改,但只需要一个中间件,而不需要角色的多种组合。这就是我要寻找的。。。竖起大拇指!