#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
промежуточное программное обеспечение!