Авторизация вместе с аутентификацией в Route.php: Laravel 5.1

У меня есть Route, который проверяет, аутентифицирован ли пользователь, и только затем разрешаю ему доступ к странице

<?php
Route::group([
    'middleware' => 'auth',
], function() {

    Route::get('/Categories-List', 'Skills\Category_Controller@index');
});

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

Могу ли я установить авторизацию вместе с аутентификацией в Laravel 5.1


person Pankaj    schedule 17.12.2015    source источник


Ответы (2)


Итак, вам нужно создать AdminMiddleware и добавить его в маршруты.

Сначала откройте свою модель User и добавьте в нее дополнительный метод:

public function isAdmin() 
{
   return $this->RoleID == 1;
}

Теперь запустите в консоли:

php artisan make:middleware AdminMiddleware

откройте свой AdminMiddleware.php и измените метод handle, чтобы он выглядел так:

if (!\Auth::user()->isAdmin()) {
    if ($request->ajax()) {
        return response('Admin account required.', 401);
    } else {
        return redirect('/'); // set here any url you need
    }
}

return $next($request);

Теперь откройте app/Http/Kernel.php и добавьте в свойство $routeMiddleware новую запись:

'isAdmin' => \App\Http\Middleware\AdminMiddleware::class,

Наконец, измените свои маршруты

'middleware' => 'auth',

в

'middleware' => ['auth', 'isAdmin'],

Порядок здесь важен, если вы измените порядок здесь, вы получите неожиданное исключение, если пользователь не вошел в систему.

В зависимости от ваших потребностей вы также можете использовать здесь только промежуточное программное обеспечение isAdmin на случай, если для этого маршрута вы хотите сделать другое перенаправление, чем в auth, когда пользователь не зарегистрирован. В этом случае вам нужно объединить методы из auth и isAdmin и подогнать под свои нужды.

person Marcin Nabiałek    schedule 24.12.2015
comment
@Helper Это происходит, когда пользователь не является администратором? Если да, определили ли вы для / url какое-либо промежуточное ПО? Вы должны перенаправить в AdminMiddleware на маршрут, где вы не используете промежуточное ПО isAdmin - person Marcin Nabiałek; 25.12.2015
comment
Если пользователь вошел в систему, но не является администратором, и нажал маршрут, защищенный isAdmin, он будет перенаправлен на /, а позже снова будет перенаправлен на / - вот почему вы получаете это. Вы должны использовать в AdminMiddleware новый маршрут, например restricted, и создать новый маршрут restricted, где вы показываете, что эта страница ограничена только для администратора, или вы должны использовать перенаправление на основной URL-адрес для зарегистрированного пользователя. - person Marcin Nabiałek; 25.12.2015
comment
stackoverflow.com/ вопросы/34560621/ - person Pankaj; 02.01.2016

Что вы хотите сделать, так это запустить несколько промежуточных программ - один для аутентификации пользователя, а другой для проверки его уровня доступа.

Что вы хотите сделать, так это определить промежуточное программное обеспечение в массиве следующим образом:

<?php
Route::group([
    'middleware' => ['auth','isAdmin'],
], function() {

    Route::get('/Categories-List', 'Skills\Category_Controller@index');
});

Как видите, я добавил промежуточное ПО isAdmin, которое будет выполнять необходимую вам проверку. Вам нужно только создать промежуточное программное обеспечение самостоятельно.

Много другой информации о промежуточном программном обеспечении на маршрутах здесь: http://laravel.com/docs/master/middleware#assigning-middleware-to-routes

person Andrius    schedule 17.12.2015