2015-03-15 8 views

Odpowiedz

13

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

+0

Otrzymaj ten błąd: Class AdminMiddleware nie istnieje –

+1

Odpowiedź jest poprawna, po prostu plz napraw to: 'middleware' => 'AdminMiddleware', powinno to być 'middleware' => 'admin', –

+0

Jeśli znasz odpowiedź, pomoc tutaj: http://stackoverflow.com/questions/29062680/middleware-how-to-redirect-after-check-laravel-5 –

1

użyj oprogramowania pośredniego i sprawdź administratora.

Route::get('admin', ['middleware' => 'checkadmin', function() 
{ 

}]); 

teraz utwórz oprogramowanie pośrednie i zatwierdź administratora.

+0

Jak to zrobić? Any tut? \ –

+0

@ user2158982 Przeczytaj dokumentację: http://laravel.com/docs/master/middleware –

+0

Jeśli znasz odpowiedź, pomoc tutaj: http://stackoverflow.com/questions/29062680/middleware-how-to -redirect-after-check-laravel-5 –

3

Załóżmy, że masz kolumnę w tabeli użytkowników z isAdmin nazwą, która ma domyślną wartość 0 (fałsz)

Możesz dać specjalny dostęp za pomocą oprogramowania pośredniczącego w języku laravel, tak jak dajesz dostęp do logg ed użytkowników korzystających z oprogramowania pośredniczącego auth w laravel. Teraz trzeba stworzyć middleware za pomocą polecenia:

php artisan make:middleware AdminMiddleware 

W swojej Kernel.php trzeba dodać tę linię do protected $routeMiddleware

'admin' => \App\Http\Middleware\AdminMiddleware::class, 

W folderze middleware masz plik AdminMiddleware. tym, że trzeba umieścić swoją logikę W tym przypadku jest to jak to może wyglądać w zależności od was

<?php 

namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Support\Facades\Auth; 

class RoleMiddleware 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 

     if(Auth::user()->isAdmin == '1') // is an admin 
     { 
      return $next($request); // pass the admin 
     } 

     return redirect('/'); // not admin. redirect whereever you like 

    } 
} 

Teraz w trasie trzeba przekazać URL za pomocą tego middleware Oto jak może wyglądać jak

+1

Fałsz powinien być reprezentowany przez 0 ... 1 jest prawdziwy –

+0

@ColinStadig Dzięki za poprawkę. To jest poprawione. –

Powiązane problemy