2016-05-16 10 views
1

ユーザーがロールに一致するかどうかを確認するための単純なミドルウェアを追加しようとしています。私はミドルウェアを使用する場合、私は例外を取得問題に実行しているよ:Laravel RoleMiddleware、クラスロールが見つかりません

ReflectionException:私は仮定して、クラスの役割は

存在しない、私は役割という名前のクラスを呼び出そうとしません。これはLaravelのどこかで魔法のように起こっています。

マイミドルウェア:usersテーブルで

class RoleMiddleware 
{ 
    /** 
    * Run the request filter. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @param string $role 
    * @return mixed 
    */ 
    public function handle($request, Closure $next, $role) 
    { 
     if (! $request->user()->is($role)) { 
      return redirect('/login'); 
     } 

     return $next($request); 
    } 

} 

が、私は役割のフィールドを持っていると私は持っているユーザーモデルで:

/** 
* Check if a user is a certain role 
* 
* @param $role 
* @return bool 
*/ 
function is($role) { 
    return ($this->role == $role); 
} 

ルートグループ:

Route::group(['prefix' => 'support', 'middleware' => ['role:admin', 'web']], function() { 
     Route::get('threads', '[email protected]'); 
}); 

In Http/Kernel.php:

protected $middlewareGroups = [ 
    'web' => [ 
     \App\Http\Middleware\EncryptCookies::class, 
     \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 
     \Illuminate\Session\Middleware\StartSession::class, 
     \Illuminate\View\Middleware\ShareErrorsFromSession::class, 
     \App\Http\Middleware\VerifyCsrfToken::class, 
    ], 

    'role' => [ 
     RoleMiddleware::class, 
    ], 
]; 

誰でもこのReflectionExceptionの原因となる可能性のあるアイデアはありますか?

+0

てみ '\アプリケーション\のHttp \ミドルウェア\ RoleMiddleware: :class'とexecut 'dump-autoload'も実行したら、それを教えてください。 –

+0

名前空間は問題なく、クラスに到達することができ、単に役割:管理者の代わりにミドルウェア '役割'を使用すると、欠落している引数についてエラーをスローします。 – Devon

答えて

3

Http/Kernel.phpには、RoleMiddlewareのフルパスを含める必要があります。これがダウンして二つの問題に来た例えば:

... 
'role' => [ 
    \App\Http\Middleware\RoleMiddleware::class, 
], 
... 
+0

完全な名前空間が不要なので、それを使用してインポートします。 – Devon

0

  1. $ middlewareGroupsは、パラメータを許可しない場合があります。 (確認が必要)RoleMiddlewareを$ routeMiddlewareまで落とすと、例外が取り除かれました。

  2. 'role:admin'の後に 'web'を付けると、null $ request-> user()が返されました。将来のユーザーにとっては、ミドルウェアの配置と、$ request-> user()がnullかどうかを確認する必要があります。

これは他の人に役立つことを望みます。

Route::group(['prefix' => 'support', 'middlewareGroups' => ['role:admin', 'web']], function() { 
    Route::get('threads', '[email protected]'); 
}); 

にこの

Route::group(['prefix' => 'support', 'middleware' => ['role:admin', 'web']], function() { 
    Route::get('threads', '[email protected]'); 
}); 

を変更する

0

てみてください私は私がこれと同じ問題に直面し、あなたの-own-」にミドルウェアから名前を変更することで修正されましたlaravelで初心者ですmiddelware-name "と入力します。 Spatie/Laravel-権限が機能するために

0

適切に我々は2つの認証ミドルウェアとともに、次のようにapp/Http/Kernel.phpに2つのルートのミドルウェアを登録する必要があります。

/** 
* The application's route middleware. 
* 
* These middleware may be assigned to groups or used individually. 
* 
* @var array 
*/ 
protected $routeMiddleware = [ 
    'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 
    'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class, 
    'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class, 
]; 
関連する問題