2016-09-19 5 views
1

У меня есть 2 Middlewares.StaffMiddleware And AdminMiddleware Laravel 5.3

Мои StaffMiddleware

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

     return redirect()->route('store'); 
    } 
    return $next($request); 
} 

Мой AdminMiddleware

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

     return redirect()->route('store'); 
    } 
    return $next($request); 
} 

Проблема моя UnitController

public function __construct(UnitInterface $unit){ 

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

Он должен работать либо роль является сотрудником или администратором. Нужно ли мне создавать другое промежуточное программное обеспечение, чтобы объединить их?

ответ

1

Это полностью зависит от способа разработки вашего промежуточного программного обеспечения. Как вы можете видеть из своего кода, он просто перенаправляет, если роль не является персоналом или нет администратором, поэтому у вас не будет логики OR.

Однако, чтобы избежать этого, вы можете использовать параметры промежуточного слоя.

$this->middleware('role:admin,staff'); 

Это будет использовать role промежуточное программное обеспечение и передавать admin и staff в качестве параметров.

Затем вы можете использовать эти параметры в вашем промежуточном слое:

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

     return redirect()->route('store'); 
    } 
    return $next($request); 
} 

Это захватывает дополнительные параметры в массив $params, в котором вы можете проверить, если роль пользователя соответствует одному из параметров.

+0

Да, я знаю, можем ли мы реализовать "администратор или персонал"? Если у него есть роль администратора или персонала, тогда проблема не будет перенаправлена. – Rbex

+0

@Rbex, я обновил свой ответ, чтобы показать, как вы можете использовать параметры, чтобы сделать ваше промежуточное ПО более гибким. Это потребует изменения вашего промежуточного программного обеспечения, но потребует только одно промежуточное программное обеспечение, а не множество комбинаций для ролей. – Devon

+0

Вот что я ищу ... Thumbs up! – Rbex

0
**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') 
     }); 
    } 

Нет промежуточного