2016-09-13 5 views
0
.

. Я изо всех сил пытаюсь полностью понять, как промежуточное программное обеспечение работает в Laravel 5+. У меня есть контроллер для пользователей, которым я хочу разрешить доступ администратора ко всем функциям через промежуточное программное обеспечение, а затем разрешить менеджерам доступ только к нескольким функциям. В настоящее время конструктор выглядит, как это в верхней части UserControllerLaravel 5.2 - Ограничение доступа в контроллере. Конструирование для двух групп пользователей с использованием промежуточного программного обеспечения.

$this->middleware('admin'); 

    $this->middleware('manager', ['only', [ 
     'store', 
     'profile', 
     'profileUpdate' 
    ]]); 

Промежуточное программное обеспечение для каждого заключается в следующем:

public function handle($request, Closure $next) 
{ 
    if (!Auth::check()) { 
     return redirect()->guest('/auth/login'); 
    } 

    if (Session::get('is_admin') === 1) { 
     return $next($request); 
    } 

    return Redirect::to('/auth/login'); 
} 

и менеджер:

public function handle($request, Closure $next) 
{ 
    if (!Auth::check()) { 
     return redirect()->guest('/auth/login'); 
    } 

    if (Session::get('is_manager') === 1) { 
     return $next($request); 
    } 

    return Redirect::to('/auth/login'); 
} 

Они оба перечисленных в Kernal.php под защищенным $ routeMiddleware.

Поэтому я бы хотел, чтобы менеджеры имели доступ к функции «магазин», чтобы они могли сохранять новых пользователей в системе, но когда я использую свое промежуточное программное обеспечение, показанное в верхней части этого сообщения, оно просто отправляет как администраторов, так и менеджеров вернуться к маршруту /.

Может ли кто-нибудь помочь объяснить, что за исключением и только в промежуточном программном обеспечении внутри конструктора и почему один, похоже, отменил другой? Приветствия.

ответ

0

По умолчанию промежуточное программное обеспечение применяется для каждого метода в вашем контроллере.

«За исключением» указывает, что промежуточное ПО применяется для всех методов вашего контроллера «кроме» тех, которые указаны с помощью параметра except.

«Только» делает обратное, применяет только промежуточное ПО «только» к указанным методам.

Что касается вашего кода, вы вероятно, должны двигаться

if (!Auth::check()) { 
    return redirect()->guest('/auth/login'); 
} 

В отдельном middlware, который только проверить на проверку подлинности пользователя, а затем применить этот промежуточное программное обеспечение в вашем routes.php так:

$router->group(['middleware' => 'auth'], function() { 
    // routes that require authentication 
}); 

 Смежные вопросы

  • Нет связанных вопросов^_^