Как обезопасить маршруты laravel-5.8
Привет, я хочу, чтобы только администратор мог получить доступ к маршруту filecontroller, или пользователь не может получить доступ, набрав URL:
это маршруты:
Route::group(['middleware' => ['web','auth']], function(){
Route::get('/', function () {
return view('welcome');
});
Route::get('/home', function(){
if (Auth::user()->admin == 0) {
return view('home');
} else {
$users['users'] = \App\User::all();
return view('layouts.master', $users);
}
});
Route::resource('file','FileController');
});
Пользователь не может получить доступ к Route::resource('file','FileController'); если он знает URL
2 ответа
Использовать промежуточное ПО
Следующая команда создает новое Middleware под названием Admin
php artisan make:middleware Admin
Это создает файл с именем Admin.php в каталоге app/Http/Middleware, который выглядит как
<?php namespace App\Http\Middleware;
use Closure;
class Admin {
public function handle($request, Closure $next)
{
if ( Auth::check() && Auth::user()->isAdmin() )
{
return $next($request);
}
return redirect('home');
}
}
Затем вам нужно добавить промежуточное ПО администратора в файл app/Http/Kernel.php
protected $routeMiddleware = [
'auth' => 'App\Http\Middleware\Authenticate',
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
'admin' => 'App\Http\Middleware\Admin', // this line right here
];
Добавьте промежуточное программное обеспечение администратора к маршруту.
Route::resource('file','FileController')->middleware(Admin::class)
Наконец, вам нужно добавить метод isAdmin, который мы создали выше, в вашу модель User, чтобы проверить, является ли пользователь администратором.
class User extends Model
{
protected $casts = [
'is_admin' => 'boolean',
];
public function isAdmin()
{
return $this->is_admin;
}
}
Вы можете использовать промежуточное ПО Laravel
URL: https://laravel.com/docs/5.8/middleware или https://www.tutorialspoint.com/laravel/laravel_middleware.htm
и использовать для маршрутизации
Route::group(['middleware' => 'isAdmin'], function(){
Route::get('user', 'user\UserController@index');
});