2017-12-13 16 views
0

アクションにアクセスできるユーザーを処理するためにPostPolicy.phpを定義しました。
投稿を更新するPUTリクエストを処理しようとしていますが、正しく動作していないようです。コントローラヘルパーによる承認:メソッドauthorize()が存在しません - 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; 
    } 
} 

私はAuthServiceProvider.php

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

で、このポリシーを登録マイルート:

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

最終私はフォームを送信すると、ここに私のコントローラは

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() { 
    } 
} 

で、私が得ましたエラーMethod [authorize] does not exist on [App\Http\Controllers\CMS\PostController].

私のデモは、documentationに従っています。

私の間違いは何ですか?進行中の行方不明ですか?

+0

はい、あなたのコントローラにはこれらのメソッドがありません。あなたのアプリケーション 'App \ Http \ Controllers \ Controller'で拡張するはずのコントローラを見てください。あなたのファイルの一番上には何もしません。 – lagbox

答えて

0

authorizeの方法は、Illuminate\Foundation\Auth\Access\AuthorizesRequests形質によって利用可能になる。

あなたは、直接あなたのコントローラにこの形質を追加することができ、またはあなたはそれがすでにこの特性(だけでなく、DispatchesJobsValidatesRequestsを)持っているとして、あなたのコントローラは、そのLaravelに付属(App\Http\Controllers\Controller)デフォルトのコントローラを拡張することができます。

+0

ヤップ、その私の行方不明。 'authorize()'メソッドが機能しました。しかし、 'PostPolicy'の' update() 'メソッドはすでに' true'を返していますが、このアクションは不正です。 –

関連する問題