web-dev-qa-db-ja.com

Laravelルートグループにカスタムミドルウェアを追加する

私のWebアプリケーションには管理パネルがあり、次のコードで管理ロールを持つユーザーにアクセスしようとしています。

namespace App\Http\Middleware;
use Closure;
class CheckUserAdminRole
{
    public function handle($request, Closure $next)
    {
        if (auth()->check()) {
            if (auth()->check() && !auth()->user()->hasRole('admin')) {
                auth()->logout();
                return redirect(route('system.messages','userIsNotAdmin'));
            }
        }
        return $next($request);
    }
}

私のルートには次のルートグループがあります。

Route::group(['namespace' => 'Dashboard', 'middleware' => ['auth:web'], 'prefix' => 'dashboard'], function () {
    $this->group(['prefix' => 'administrator'], function () {
        $this->get('panel', 'AdminController@index');
});

私のカーネル:

protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    ...
    \App\Http\Middleware\CheckUserAdminRole::class,
];

次に、ミドルウェアをCheckUserAdminRoleとしてルートグループに追加すると、次のコードのようになります。

Route::group(['namespace' => 'Dashboard', 'middleware' => ['auth:web','CheckUserAdminRole'], 'prefix' => 'dashboard'], function () {

私はこのエラーを受け取ります:

Class CheckUserAdminRole does not exist

このコードは私の問題を解決できませんでした:

php artisan route:clear
php artisan cache:clear
php artisan config:clear
composer dump-autoload
4
DolDurma

ミドルウェアを$middleware配列に登録する代わりに、次のように$routeMiddlewareに登録する必要があります。

protected $routeMiddleware = [
    ...
    'checkAdmin' => \App\Http\Middleware\CheckUserAdminRole::class,
];

注:$middleware配列にミドルウェアを登録すると、every要求に対して実行されるため、特定のルートに適用されます。

次に、checkAdminという名前でルートで使用できます。

Route::group(['namespace' => 'Dashboard', 'middleware' => ['auth:web','checkAdmin'], 'prefix' => 'dashboard'], function () {

ソース

6
SystemGlitch

次のように、ミドルウェアとルートグループを簡単に一緒に使用することもできます。

Route::group(['prefix' => 'admin',  'middleware' => 'auth'], function()
{
    //All the routes that belongs to the group goes here
    Route::get('dashboard', function() {} );
});
2
Emeka Augustine

プレフィックスとグループでミドルウェアを試すことができます。

Route::middleware(['Auth'])->prefix('api/')->group(function() {
    Route::group(['prefix' => 'review/'], function () {
       Route::get('/', 'User\Controllers\Api\UserController@getUserReviews');
    });
});

助けてほしい

0