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,我已经更新了我的答案,以说明如何使用参数使中间件更灵活。它需要对您的中间件进行更改,但只需要一个中间件,而不需要角色的多种组合。这就是我要寻找的。。。竖起大拇指!