2017-08-02 4 views
0

Ich habe eine Anwendung, die Benutzer und Produkte hat. Nur die Produktbesitzer sollten in der Lage sein, das Produkt zu sehen.Laravel nur Eigner Benutzer Zugriff auf Route

Wenn ein Benutzer eine Produkt-ID rät, kann er das Produkt möglicherweise anzeigen. Zum Beispiel

http://booker.app/admin/products/32 

diesen Link Nach jedem angemeldeten Benutzer erlauben würde, das Produkt mit der ID 32.

Dies ist die betreffende Strecke anzuzeigen:

Route::middleware(['middleware' => 'auth'])->prefix('admin')->group(function(){ 
    Route::resource('products', 'ProductController'); 
}); 

Meine Produkte Controller Show-Methode:

public function show(Product $product) 
{   
    if($product->user_id !== Auth::user()->id){   
     return $this->forbidden('admin/products'); 
    } 

    return $this->makeResponse('admin.products.product', compact('product')); 
} 

Die verbotenen und makeResponse Funktionen einfach überprüfen, ob die requ est war eine Ajax-Anfrage und wenn ja, json.

Wie Sie sehen können, verwende ich Route-Modell-Bindung und ich überprüfe, ob der autorisierte Benutzer das gleiche wie Produkt User_id ist. Grundsätzlich gibt es eine bessere Möglichkeit zu überprüfen, ob der Benutzer der Besitzer des Produkts ist.

+4

Verwenden von [Richtlinien] (https://laravel.com/docs/5.4/authorization#writing-policies) ist die "Laravel" -Methode, dies zu tun. – milo526

Antwort

1

In Laravel können Sie Policies definieren, um ACL und Zugriffslogik für Ihre Datenschicht anzugeben.

Für die Klasse Beispiel erstellen ProductPolicy:

class ProductPolicy 
{ 

    public function show(User $user, Product $product) 
    { 
     return $user->id === $product->user_id; 
    } 

} 

Dann binden die Richtlinie auf die Product Modell die folgende Zeile in $policies Array in AuthServiceProvider Einfügen:

protected $policies = [ 
    Product::class => ProductPolicy::class, 
]; 

Jetzt Methode in Ihrem Controller können Sie Verwenden Sie die folgende Syntax, um den Benutzer zu einer bestimmten Aktion zu autorisieren:

Die Methode authorizeForUser ruft die Methode show Ihrer Richtlinie auf, die nur dann true zurückgibt, wenn das Produkt dem authentifizierten Benutzer gehört.

Ich hoffe, es hilft.

Verwandte Themen