2016-04-24 3 views
3

Ich habe ein kleines Problem. Es gibt zwei Benutzerrollen und eine ist ein normales Mitglied und eine ist ein Administrator. Das Mitglied kann einen Blog löschen und das Blog wird nicht mehr angezeigt, nachdem es gelöscht (gelöscht) wurde, während der Administrator das Blog weiterhin sehen kann, selbst wenn es gelöscht wurde.Laravel - Implizite Route Modellbindung mit weichen gelöschten Daten

Beispielcode:

// Route file 
Route::get('/blog/{blog}', '[email protected]'); 

// BlogController 

public function show(App\Blog $blog) { 
    // It never gets to here if the blog has been soft deleted... 
    // Automatically throws an 404 exception 
} 

Ich möchte der Administrator der Lage sein, den Blog zu besuchen, auch wenn es weich gelöscht ist, aber es funktioniert nicht wirklich. Ich versuche, den Route Service Provider zu bearbeiten, aber ich habe kein Glück bekommen, da es mir nicht die Auth::user() Funktion erlaubt, den angemeldeten Benutzer zu bekommen, damit ich überprüfen kann, ob sie die Erlaubnis haben.

Mein RouteServiceProvider

$router->bind('post', function($post) { 
     if (Auth::user()->isAdmin() 
      return Post::withTrashed()->where('id', $post)->firstOrFail(); 
    }); 

Das funktioniert nicht, da sie nicht weiß, was Auth::user() ist. Ich habe Auth Fassade importiert, funktioniert aber immer noch nicht.

Edit: Es gibt mir einen null Wert, wenn ich dump und sterben Auth::user().

Jede Hilfe wird sehr geschätzt.

+0

Was bedeutet „es nicht lassen Sie mich“ bedeuten? Fehlermeldung, ... ? – Nick

+0

Sorry, ich habe die Frage aktualisiert. Aber es sagt nur null und sagt, kann die Funktion auf Null nicht überprüfen .. –

Antwort

4

Ich habe gerade herausgefunden, dass das Erhalten der current logged in user in Route Service Provider nicht möglich ist, da es vor allen Sitzungsdienstanbieter lädt.

Stattdessen habe ich einfach:

//Route Service Provider 
$router->bind('post', function($post) 
    return Post::withTrashed()->where('id', $post)->firstOrFail(); 
}); 

// Controller 
public function show(Post $post) { 

// If the post has been trashed and the user is not admin, he cannot see it 
    if (!Auth::user()->isAdmin() && $post->trashed()) 
     abort(404); 

    // Proceed with normal request because the post has not been deleted. 
}