2017-12-13 5 views
0

Ich definierte PostPolicy.php um zu handhaben, wer auf Aktionen zugreifen kann.
Ich versuche, PUT-Anfrage zu bearbeiten, um eine Post zu aktualisieren, aber es scheint nicht richtig zu funktionieren.Autorisierung über Controller Helper: Methode authorize() existiert nicht - Laravel 5.5

namespace App\Policies; 

use App\Models\Users; 
use App\Models\Posts; 
use Illuminate\Auth\Access\HandlesAuthorization; 

class PostPolicy 
{ 
    use HandlesAuthorization; 

    public function view(Users $user, Posts $posts) 
    { 
     return true; 
    } 

    public function create(Users $user) 
    { 
     return true; 
    } 

    public function update(Users $user, Posts $posts) 
    { 
     return true; //$user->id === $posts->user_id; 
    } 

    public function delete(Users $user, Posts $posts) 
    { 
     return $user->id === $posts->user_id; 
    } 
} 

ich diese Politik

protected $policies = [ 
    'App\Model' => 'App\Policies\ModelPolicy', 
    App\Models\Posts::class => App\Policies\PostPolicy::class, 
]; 

Mein Weg in AuthServiceProvider.php registriert:

Route::put('post/update/{id}', 'CMS\[email protected]'); 

Last, hier ist mein Controller

namespace App\Http\Controllers\CMS; 

use Illuminate\Foundation\Bus\DispatchesJobs; 
use Illuminate\Routing\Controller as BaseController; 
use Illuminate\Foundation\Validation\ValidatesRequests; 
use Illuminate\Foundation\Auth\Access\AuthorizesRequests; 
use App\Models\Posts as PostModel; 
use LRedis; 
use Illuminate\Http\Request; 

class PostController extends BaseController 
{ 
    public function __construct() 
    { 

    } 

    public function update (Request $request, PostModel $postModel) { 
     $this->authorize('update', $postModel); 

    } 

    public function subcribe() { 
    } 
} 

Als ich Formular abgesendet haben, habe ich Fehler Method [authorize] does not exist on [App\Http\Controllers\CMS\PostController].

Ich mache meine Demo folgen documentation.

Was sind meine Fehler? Fehle ich gerade?

+0

ja du verpasst etwas .. dein Controller hat diese Methoden nicht ... schau dir den Controller an, den du erweitern solltest in deiner Anwendung 'App \ Http \ Controllers \ Controller' ... nur Aliasing Dinge in der Spitze der Datei, tut nichts von selbst – lagbox

Antwort

0

Die authorize Methode wird durch die Illuminate\Foundation\Auth\Access\AuthorizesRequests Eigenschaft zur Verfügung gestellt.

Sie können entweder direkt diese Eigenschaft zu Ihrem Controller hinzufügen, oder Sie können Ihr Controller erweitern den Standard-Controller, die im Lieferumfang Laravel (App\Http\Controllers\Controller) haben, wie es bereits dieses Merkmal (wie auch DispatchesJobs und ValidatesRequests) hat.

+0

Yap, es ist meine fehlende. 'authorize()' Methode hat funktioniert. Aber ich bekam den Fehler 'Diese Aktion ist nicht autorisiert', obwohl die Methode' update() 'in' PostPolicy' bereits 'true' zurückgibt –

Verwandte Themen