2015-11-01 3 views
0

Я создал промежуточное программное обеспечение, как:Laravel: Пользовательские Промежуточное применения на каждом маршруте

use Closure; 
use Gate; 
class ACLMiddleware 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     if (Gate::denies('access-post')) { 
      abort(403,'Not allowed!!!'); 
     } 
     return $next($request); 
    } 
} 

А затем определить в маршрут как:

Route::get('/', '[email protected]'); 

Route::group(['middleware' => 'auth','acl'], function() { 

    Route::resource('post', 'PostController'); 
    ... 

Когда я запускаю это .. это претендующая на все маршруты , даже на /. Почему так?

Kernel.php

<?php 

namespace App\Http; 

use Illuminate\Foundation\Http\Kernel as HttpKernel; 

class Kernel extends HttpKernel 
{ 
    /** 
    * The application's global HTTP middleware stack. 
    * 
    * @var array 
    */ 
    protected $middleware = [ 
     \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, 
     \App\Http\Middleware\EncryptCookies::class, 
     \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 
     \Illuminate\Session\Middleware\StartSession::class, 
     \Illuminate\View\Middleware\ShareErrorsFromSession::class, 
     \App\Http\Middleware\VerifyCsrfToken::class, 
     \App\Http\Middleware\ACLMiddleware::class, 
    ]; 

    /** 
    * The application's route middleware. 
    * 
    * @var array 
    */ 
    protected $routeMiddleware = [ 
     'auth'  => \App\Http\Middleware\Authenticate::class, 
     'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 
     'guest'  => \App\Http\Middleware\RedirectIfAuthenticated::class, 
     'acl'  => \App\Http\Middleware\ACLMiddleware::class, 
    ]; 
} 
+0

что делает ваш 'App \ Http \ Kernel.php' файл выглядеть? – tam5

+0

@tam Вопрос обновлен – Volatil3

+0

работает ли «auth» при каждом запросе или просто «acl»? – tam5

ответ

2

Ваш промежуточного слоя зарегистрированы в App\Http\Kernel.php.

Массив:

protected $middleware = ['...']; 

определяет промежуточное, который должен быть запущен на каждом запросе HTTP. В вашем случае вам нужно удалить \App\Http\Middleware\ACLMiddleware::class, если вы не хотите, чтобы он запускался по каждому запросу.

Массив:

protected $routeMiddleware = ['...']; 

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

+0

Я удалил, но теперь его также не вызывают на маршруте. – Volatil3

+0

Нужно ли мне вносить изменения так, как я устанавливаю маршрут промежуточного программного обеспечения? – Volatil3

0

Вы должны связать промежуточное программное обеспечение с маршрутом, используя имя класса MW, как: Route::post('route', '[email protected]')->middleware(Authorize::class);

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