2014-10-24 4 views
0

Я работаю над проектом Laravel, который предназначен только для использования администратором бэкэнда администратора. Таким образом, нет разделения «стандартного пользователя» и «администратора пользователя». Итак, я хочу реализовать какой-то глобальный фильтр auth для всего проекта.Laravel auth по всем запросам (глобальный auth?)

То, что я до сих пор это на по приложение/routes.php

<?php 

// Home route with login required 
Route::get('/', array('as' => 'home', function() { 
    return View::make('hello'); 
}))->before('auth'); 

/* 
* Global Auth Filter - All Guests Go To Login 
*/ 
Route::filter('auth', function($route, $request) { 
    if (Auth::guest()) 
     return Redirect::guest('login') 
      ->with('login_error', 'Login required!'); 
}); 

/* 
* Login Route Handler 
*/ 
Route::get('login', array('as' => 'login', function() { 
    if (Auth::check()) 
     return Redirect::route('home'); 
    return View::make('login'); 
}))->before('guest'); 

/* 
* Login Post Event Handler 
*/ 
Route::post('login', function() 
{ 
    // Parse form data 
    $user = array(
     'username' => Input::get('username'), 
     'password' => Input::get('password') 
    ); 

    // Try to login user 
    if (Auth::attempt($user)) 
    { 
     // login success 
     return Redirect::route('home'); 
    } 
    else 
    { 
     // Login error 
     return Redirect::route('login') 
      ->withInput() 
      ->with('login_error', 'Invalid username and/or password!'); 
    } 
}); 

/* 
* Logout Route Handler 
*/ 
Route::get('logout', array('as' => 'logout', function() { 
    Session::flush(); 
    return Redirect::route('home'); 
}))->before('auth'); 

Это прекрасно работает. Если я попал на страницу /, он перенаправляет меня на маршрут /login, и оттуда я могу войти в систему. После входа в систему у меня есть ссылка /logout на вид hello, и это также работает (т. Е. Выходит из системы).

Этот код, приведенный выше, является моим тестовым кодом. В реальном приложении я работаю (с над проектом от предыдущего разработчика), маршруты приложение/routes.php настроены так:

<?php 

Route::controller('dev', 'DevController'); 
Route::controller('orders', 'OrdersController'); 
Route::controller('customers', 'CustomersController'); 
Route::controller('picking', 'PickingController'); 
Route::controller('stock', 'StockController'); 
Route::controller('suppliers', 'SuppliersController'); 
Route::controller('warehouse', 'WarehouseController'); 
Route::controller('upload', 'UploadController'); 
Route::controller('apixero', 'XeroController'); 

Route::controller('api/orders', 'OrdersAPIController'); 
Route::controller('api/picking', 'PickingAPIController'); 
Route::controller('api/po', 'PurchaseOrdersAPIController'); 
Route::controller('api/products', 'ProductsAPIController'); 
Route::controller('api/customer', 'CustomerAPIController'); 
Route::controller('api/suppliers', 'SuppliersAPIController'); 
Route::controller('api/currency', 'CurrencyAPIController'); 
Route::controller('api/notes', 'NotesAPIController'); 

Route::get('/', function() { 
    return View::make('dashboard'); 
}); 

Мой вопрос # 1 это, как я применить «глобальный» запрос на запросы с этим app/routes.php? Поскольку реальный код маршрутов приложений, похоже, отличается от того, что я разработал в своем тестовом коде.

Вопрос # 2 - Посмотрите на мой тестовый код, может кто-то сказать мне, в какой момент этот фильтр запускается:

Route::filter('auth', function($route, $request) { ... }); 

Эта концепция кода была заимствована из учебника я читал, но я заметил, что мой test код продолжает работать нормально - даже если я удалю этот блок кода. Таким образом, я не совсем уверен, в каком сценарии выполняется выполнение кода.

ответ

2

Фильтры маршрута отключены в тестовой среде. Чтобы включить их, добавьте Route::enableFilters() к вашему тесту.

Чтобы добавить глобальный фильтр аутентификации - вы можете сделать это:

Route::get('/login')... //rest of code here 
Route::get('logout')... //rest of code here 

Route::group(array('before' => 'auth'), function() 
{ 
    Route::controller('dev', 'DevController'); 
    Route::controller('orders', 'OrdersController'); 
    ... 
    Route::controller('api/notes', 'NotesAPIController'); 
    Route::get('/', function() { 
      return View::make('dashboard'); 
    }); 
}); 
+0

Спасибо, просто проверил это и работает, как ожидалось. Вот работающий 'routes.php' для меня http://pastebin.com/b7BdX4kv – Latheesan