2017-03-29 9 views
2

存在しないことができ、私が手:Laravel認証ミドルウェア:クラスは私がURLをヒットすると<a href="https://laravel.com/docs/5.3/authorization#via-middleware" rel="nofollow noreferrer">described in the doc</a></p> <p>としてミドルウェアを経由するルートを保護しようとしている

ReflectionException in Container.php line 749: 
Class can does not exist 

ここroutes.phpから関連する部分です:

Route::get('{user}/profile/edit/{type?}', [ 
    'as' => 'edit', 
    'uses' => 'User\[email protected]', 
    'middleware' => ['can:edit-user,user'], 
]); 

AuthServiceProvider.php

public function boot() 
{ 
    $this->registerPolicies(); 

    // ... other definitions 

    Gate::define('edit-user', function ($user, $subjectUser) { 
     return 
      $user->hasRole('manage.user') // if the user has this role, green 
      || 
      ($user->isAdmin && $user->id == $subjectUser->id) // otherwise if is admin, can edit her own profile 
      ; 
    }); 

私はゲートを定義するために別のポリシークラスを使用していないためでしょうか? documentation on using Middleware with Routesによると

+0

私は別のポリシークラスをUserに追加し、その上にチェックロジックを移動しようとしました。同じ結果。 –

+0

ミドルウェアは '' middleware '=> [' can:edit-user、user ']に 'can'というクラスとして登録しています。これは実際にあなたのエラーメッセージがあなたに伝えているものです。そのクラスはどこに定義されていますか? – Tom

+0

@thebluefox分かりません。私はLaravelの医者が言うことをします。 (https://laravel.com/docs/5.3/authorization#via-middlewareでチェックしましたか?)Laravelのソースを参照するだけで、Canクラスは表示されません。私はまた、 'can'をauth、authorizeとgateで置き換えようとしました。 –

答えて

2

- あなたはミドルウェア、アプリケーションへのすべてのHTTP要求時に実行したい場合は、単にあなたの$ミドルウェアプロパティでミドルウェアクラスをリストapp/Http/Kernel.php

に定義を登録する必要がありますapp/Http/Kernel.phpクラスです。

表示されているエラーは、この定義が欠落していることを示しています。次のようなものを追加する必要があります。

// Within App\Http\Kernel Class... 

protected $routeMiddleware = [ 
    //... 
    'can' => \Path\To\Your\Middleware::class, 
]; 
関連する問題

 関連する問題