Как объединить маршрут в Laravel - PullRequest
0 голосов
/ 05 мая 2020

Я новичок в Laravel. У меня есть проект в Laravel 6. У меня есть этот код в routes / admin. php:

Route::name('admin.')->group(function(){
    Auth::routes(['register' => false, 'reset' => false, 'confirm' => false, 'verify' => false]);

    Route::get('/', 'HomeController@index')->name('admin.home');
    Route::get('/', 'HomeController@index')->name('home');
});
Route::group(['prefix' => ''], function () {
    //Auth::routes(['register' => false, 'reset' => false, 'confirm' => false, 'verify' => false]);
    /* Pages */
    Route::get('/pages', 'PageController@index')->name('page.index');
    Route::get('/pages/create', 'Admin\PageController@create')->name('page.create');
    Route::post('/pages/store', 'Admin\PageController@store')->name('page.store');
    Route::get('/pages/edit' . '/{id?}', 'Admin\PageController@edit')->name('page.edit');
    Route::put('/pages/update', 'Admin\PageController@update')->name('page.update');
    Route::delete('/pages/destroy'. '/{id?}', 'Admin\PageController@destroy')->name('page.destroy');

    /* Users */
    Route::get('/users', 'Admin\UserController@index')->name('user.index');
    Route::get('/users/create', 'Admin\UserController@create')->name('user.create');
    Route::post('/users/store', 'Admin\UserController@store')->name('user.store');
    Route::get('/users/edit' . '/{id?}', 'Admin\UserController@edit')->name('user.edit');
    Route::put('/users/update', 'Admin\UserController@update')->name('user.update');
    Route::delete('/users/destroy'. '/{id?}', 'Admin\UserController@destroy')->name('user.destroy');
});

Все с этого URL-адреса требуют входа пользователя (admin).

В RouteServiceProvider I иметь:

protected function mapApiRoutes()
    {
        Route::prefix('api')
            ->middleware('api')
            ->namespace($this->namespace)
            ->group(base_path('routes/api.php'));
    }

    protected function mapAdminRoutes()
    {
        Route::prefix(config('app.admin_prefix'))
            ->middleware('web')
            ->namespace($this->namespace.'\Admin')
            ->group(base_path('routes/admin.php'));
    }

    protected function mapAdminOnlyRoutes()
    {
        Route::middleware('web')
            ->namespace($this->namespace. '\Admin')
            ->group(base_path('routes/admin.php'));
    }

Как я могу сменить администратора php? Теперь пользователь, у которого нет логина, может просматривать мой URL

КОД ПОСЛЕ ОБНОВЛЕНИЯ: Код после обновления. Оптимально ли написан этот код?

Route::name('admin.')->group(function(){
    Auth::routes(['register' => false, 'reset' => false, 'confirm' => false, 'verify' => false]);

    Route::get('/', 'HomeController@index')->name('admin.home');
    Route::get('/', 'HomeController@index')->name('home');
});


Route::group(['prefix' => ''], function () {
    /* Pages */
    Route::get('/pages', 'PageController@index')->middleware('auth')->name('page.index');
    Route::get('/pages/create', 'PageController@create')->middleware('auth')->name('page.create');
    Route::post('/pages/store', 'PageController@store')->middleware('auth')->name('page.store');
    Route::get('/pages/edit' . '/{id?}', 'PageController@edit')->middleware('auth')->name('page.edit');
    Route::put('/pages/update', 'PageController@update')->middleware('auth')->name('page.update');
    Route::delete('/pages/destroy'. '/{id?}', 'PageController@destroy')->middleware('auth')->name('page.destroy');

    /* Users */
    Route::get('/users', 'UserController@index')->middleware('auth')->name('user.index');
    Route::get('/users/create', 'UserController@create')->middleware('auth')->name('user.create');
    Route::post('/users/store', 'UserController@store')->middleware('auth')->name('user.store');
    Route::get('/users/edit' . '/{id?}', 'UserController@edit')->middleware('auth')->name('user.edit');
    Route::put('/users/update', 'UserController@update')->middleware('auth')->name('user.update');
    Route::delete('/users/destroy'. '/{id?}', 'UserController@destroy')->middleware('auth')->name('user.destroy');
});

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Допустим, вы хотите защитить маршрут Route::get('/users', 'Admin\UserController@index')->name('user.index');, чтобы только пользователи могли получить к нему доступ, вам нужно сделать так:

Route::get('/users', 'Admin\UserController@index')->middleware('auth')->name('user.index');

Но если вам нужно его открыть только для администратора, а не для других пользователей, вы можете создать собственное промежуточное ПО. См. Документы https://laravel.com/docs/7.x/middleware#defining -среднее ПО .

Затем вам необходимо зарегистрировать промежуточное ПО в $routeMiddleware в App\Http\Kernel.php. Например, вы регистрируете промежуточное ПО как admin. Тогда вы защитите свой маршрут так:

Route::get('/users', 'Admin\UserController@index')->middleware('admin')->name('user.index');

0 голосов
/ 05 мая 2020

на первом этапе вы можете использовать метод ресурсов для создания, хранения, отображения, редактирования, обновления и удаления маршрутов. например:

Route::resource('shops', 'ShopController');

и для аутентифицированных пользователей, которые могут использовать промежуточное программное обеспечение аутентификации для ваших маршрутов, например:

    Route::get('profile', ['middleware' => 'auth', function()
       {
          // Only authenticated users may enter...
       }]);

      // With A Controller...

      Route::get('profile', ['middleware' => 'auth', 'uses' => 'ProfileController@show']);

      Route::group(['prefix' => 'backend', 'as' => 'backend.', 'namespace' => 'Backend', 'middleware' => ['web', 'auth], function(){})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...