2016-08-12 2 views
1

Ich arbeite an einem Laravel-Projekt und ich muss den Zugriff auf einige Seiten beschränken, so dass nur authentifizierte Benutzer diese Seite anzeigen können.Laravel 5 Zugriff auf Seiten mit Middleware beschränken

Um dies zu tun, erstellt eine Middleware: php artisan make:middleware OnlyRegisteredUser
und registriert es in der $routemiddleware innerhalb App\Http\kernel.php als

'onlyregistereduser' => \App\Http\Middleware\OnlyRegisteredUser::class,

und das ist die Klasse. es Umleitungen an auth/login Benutzer, wenn nicht in

angemeldet
public function handle($request, Closure $next, $right=null) 
{ 
    $user = $request->user(); 

    if ($user && $user->onlyregistereduser()) { 
     return $next($request); 
    } 

    return redirect('auth/login'); 
} 

Hier ist mein Weg ist:

Route::get('admin/poem', ['middleware' => 'onlyregistereduser:admin', 'uses'=>'[email protected]']); 

admin ist ein Parameter meiner Middleware übergeben. Es ist aus meinem Benutzermodell genommen, die eine `Enum‘ Spalt wie folgt:

public function up() 
{ 
    Schema::create('users', function (Blueprint $table) { 
     //... 
     $table->enum('rights', ['admin', 'guest'])->nullable(); 
     // ... 
    }); 
} 

nun Zugriff auf einig meiner Controller-Methoden zu beschränken, zum Beispiel erstellen, ich einen Konstruktor meines PoemsController wie gezeigt hinzugefügt:

public function __construct() 
{ 
    $this->middleware('onlyregistereduser'); 
} 

Mein Problem ist nun, dass diese jede einzelne Route zum PoemsController ließ mich auf die Login-Seite umleiten. Und wieder nach dem Login, es bringt mich nicht zu der Seite, die ich besuchen wollte. es bringt mich stattdessen auf die Homepage. Was ich will ist, den Zugriff auf nur einige der Controller-Methoden und nicht alle von ihnen zu beschränken und in der Lage sein, nach der Benutzeranmeldung auf die beabsichtigte Seite umleiten. Ich hoffe, Sie verstehen mein Problem. Jede Hilfe wird sehr geschätzt.

Antwort

1

Entfernen Sie die Middleware vom Konstruktor, Sie müssen Middleware nicht zu Route und Costruktor hinzufügen. Das sollte dein "lösen. Was ich will, ist, den Zugang zu nur einigen der Steuerungsmethoden und nicht alle von ihnen" zu beschränken.

Für othe Ausgabe ändern Sie Ihre Middleware wie diese

public function handle($request, Closure $next, $right=null) 
{ 
    $user = $request->user(); 

    if ($user && $user->onlyregistereduser()) { 
     return $next($request); 
    } 
    $request_url = $request->path(); 
    session()->put('login_refferrer', $request_url); 
    return redirect('auth/login'); 
} 

und vor Redirect Benutzer nach dem Login

if(session()->has('login_refferrer')){ 
    $url = session()->pull('login_refferrer'); 
    return redirect($url); 
} 
Verwandte Themen