2017-12-30 20 views
1

Ich benutze Laravel 5.4 Richtlinien, um Benutzer Fähigkeiten zu verwalten.Laravel 5.4 Autorisierung - mit Can-Methode ohne Erfolg

Das Ziel ist es, einen Beitrag mit der 'Can' Methode zu löschen. Obwohl die Destroy-Methode ('DELETE') ausgeführt wurde, wird die if-Anweisung nicht erfolgreich ausgeführt, um den Post zu löschen. Ich habe den Rückgabewert in PostPolicy.php auf 'true' geändert, um alle anderen Variablen in den Mix zu entfernen.

PostPolicy.php:

public function delete(User $user, Post $post) 
{ 
    return true; 
} 

PostsController.php:

public function destroy($id) 
{ 
    $post = Post::findOrFail($id); 

    if ($user->can('delete', $post)) {   
     $post->delete(); 
    } 

    return response()->json($post); 

} 
+0

, wenn es auch auf die 'if' Aussage bekam wäre es eine nicht definierte Variable Problem sein – lagbox

Antwort

1

Sie sind nicht einer Benutzerinstanz zu bekommen. Wenn Sie die Berechtigungen überprüfen, für den authentifizierten Benutzer möchten, verwenden Sie auth()->user() Objekt:

if (auth()->user()->can('delete', $post)) {   
    $post->delete(); 
} 

Oder verwenden authorize() Methode:

$this->authorize('delete', $post); 
$post->delete(); 

Neben hilfreiche Methoden zum User Modell zur Verfügung gestellt, bietet Laravel eine hilfreiche authorize Methode zu einem Ihrer Controller, die die App\Http\Controllers\Controller Basisklasse erweitern. Wie die Methode can akzeptiert diese Methode den Namen der Aktion, die Sie autorisieren möchten, und das entsprechende Modell. Wenn die Aktion nicht genehmigt ist, wird die authorize Methode ein Illuminate\Auth\Access\AuthorizationException werfen, die der Standard-Laravel Exception-Handler

https://laravel.com/docs/5.4/authorization#via-controller-helpers

+0

ich beide müde Methoden empfehlen. Allerdings bekomme ich das gleiche Ergebnis wie zuvor und für die zweite Methode bekomme ich die "Forbidden 403" Antwort. – Roo

+2

@Roo und wenn Sie 'dd ($ post);' direkt nach der Abfrage, was zeigt es? Haben Sie [die Richtlinie registriert] (https://laravel.com/docs/5.4/authorization#registering-policies)? –

0

Die Frage in meinem AuthServiceProvider war zu einer HTTP-Antwort mit einem 403 Statuscode umwandelt. PHP-Datei. Ich habe nicht die folgenden Klassen gehören:

use App\Post; 
use App\Policies\PostPolicy;