Доступ к маршрутам на основе ролей в laravel

#php #laravel #laravel-5 #eloquent

Вопрос:

В приведенном ниже примере я хочу получить доступ к продукту route get только в том случае, если роль пользователя-администратор. Как я могу это сделать?

Модель пользователя в базе данных

  public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('role');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }
 

Модель продукта

 public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('slug');
            $table->string('description')->nullable();
            $table->decimal('price',5,2);
            $table->timestamps();
        });
    }
 

Api.php

 Route::group(['middleware' => ['authentic']], function () {
    Route::get('/products',[ProductController::class,'index']);
});
 

AdminMiddleware

 public function handle($request, Closure $next)
    {
        if(auth()->user()->role == 'admin'){
            return $next($request);
        } else if(auth()->user()->role == 0){
            return $next($request);
        }
        return redirect('home')->with('error', "You have no proper authentication to access the area!");
    }
 

Комментарии:

1. В промежуточном программном обеспечении вы должны перенаправить пользователя, если его роль не является администратором, в чем смысл проверки auth()->user()->role == 0 этого условия в промежуточном программном обеспечении. логика промежуточного программного обеспечения должна быть правильной, если роль пользователя-администратор, то перейдите к следующему, в противном случае перенаправьте на главную страницу с ошибкой

Ответ №1:

// Как указано выше

 `Route::group(['middleware' => ['role:admin']], function () {
    Route::get('/products',[ProductController::class,'index']);
});`
 

// ИЛИ вы можете сделать это индивидуально

 `Route::group(['middleware' => ['role:admin']], function () {
    Route::get('/products',[ProductController::class,'index'])->middleware('role:cashier');
    Route::post('/products',[ProductController::class,'index'])->middleware('role:manager');
});`
 

Комментарии:

1. Хорошо! но это показывает ошибку. Смотрите модель пользователя, в которой я дал роль

2. Это ошибка : «сообщение»: «Целевой класс [роль] не существует».,

3. определите путь контроллера продукта в маршрутах

4. Вам также необходимо установить role промежуточное программное обеспечение!