Musisz utworzyć oprogramowanie pośrednie dla swojej trasy.
Zastosowanie: php artisan make:middleware AdminMiddleware
.
W folderze oprogramowania pośredniego znajduje się nowy plik o tej nazwie.
Umieść swoją logikę w oprogramowaniu pośredniczącym, np.
public function handle($request, Closure $next)
{
if(Auth::check())
{
return $next($request);
}
else
{
return view('auth.login')->withErrors('You are not logged in');
}
}
Po dokonaniu logiki w middleware, można nazwać to w trasie lub dokonać middleware zastosowanie do wszystkich tras.
Jeśli chcesz dodać go do wszystkich tras, przejdź do Kernel.php
i dodaj go do tablicy $middleware
, np.
protected $middleware = [
'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
'Illuminate\Cookie\Middleware\EncryptCookies',
'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
'Illuminate\Session\Middleware\StartSession',
'Illuminate\View\Middleware\ShareErrorsFromSession',
'App\Http\Middleware\VerifyCsrfToken',
'App\Http\Middleware\AdminMiddleware',
];
Jeśli chcesz dodać ją do konkretnych tras tylko, dodaj go do zmiennej $routeMiddleware
i dodać alias do trasy. Na przykład.
protected $routeMiddleware = [
'auth' => 'App\Http\Middleware\Authenticate',
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
'admin' => 'App\Http\Middleware\AdminMiddleware',
];
Następnie można dodać go do trasy jako filtr, np.
Route::get('admin/profile', ['middleware' => 'admin', function()
{
}]);
Dla dodatkowej informacji odwiedź dokumentów:
http://laravel.com/docs/master/middleware
EDIT
Poprawa w tej sprawie byłoby użyć funkcji o zmiennej liczbie argumentów, który został wprowadzony w PHP 5.6
http://php.net/manual/en/migration56.new-features.php
Zamiast dokonać middleware dla każdego uprawnienia ustawić można wykonać następujące czynności
PermissionMiddleware
namespace App\Http\Middleware;
use Closure;
use \App\Models\Role;
class PermissionMiddleware
{
// Pass parameters to this middleware
public function handle($request, Closure $next, ...$permitted_roles)
{
//Get a users role
$role = new Role;
$role_name = $role->getUserRoleByName();
foreach($permitted_roles as $permitted_role) {
if($permitted_role == $role_name) {
return $next($request);
}
}
return redirect()->back()->withErrors('You do not have the required permission');
}
}
zauważy ...$ permitted_roles
Route::get('admin/profile', ['middleware' => 'PermissionMiddleware:Admin,Marketing', function()
{
}]);
Teraz można określić jak wiele ról wymaganych dla jednej warstwy pośredniej, zamiast tworzenia wielu za pomocą parametrów Middleware
Dokumenty https://laravel.com/docs/5.3/middleware#middleware-parameters
Otrzymaj ten błąd: Class AdminMiddleware nie istnieje –
Odpowiedź jest poprawna, po prostu plz napraw to: 'middleware' => 'AdminMiddleware', powinno to być 'middleware' => 'admin', –
Jeśli znasz odpowiedź, pomoc tutaj: http://stackoverflow.com/questions/29062680/middleware-how-to-redirect-after-check-laravel-5 –